2014-10-24 5 views
1

동일한 템플릿의 두 개의 다른 탭에 두 개의 양식이 있습니다. 폼의 모델은 외래 키를 통해 연결됩니다.장고 : 양식을 독립적으로 저장하십시오.

각 양식에 대해 제출 단추가 독립적으로 각 양식을 저장하려고 할 때 불행히도 두 양식이 하나의 제출 단추 만 눌러도 데이터를 다시 저장하려고합니다.

Views.py

def input(request): 
    my_demographics = DemographicForm(request.POST or None) 
    my_diagnosis = DiagnosisForm(request.POST or None) 

    context = RequestContext(request) 
    if request.method == 'POST': 
     submitted = request.POST.get('form_id', '') 

     if submitted == 'demographics': 
      # Get the Form1 instance 
      my_demographics = DemographicForm(request.POST) 
      if my_demographics.is_valid(): 
       my_demographics_object= my_demographics.save() 
       my_diagnosis=DiagnosisForm({'patient': my_demographics_object.patient_id}) 


     elif submitted == 'diagnosis': 
      # Get the Form2 instance 
      my_diagnosis = DiagnosisForm(request.POST) 
      if my_diagnosis.is_valid(): 
       my_diagnosis.save() 

     else: 
      raise ValueError('No form specified !') 


return render_to_response('input.html', {'frm':my_demographics, 'frm_d': my_diagnosis}, context) 

input.html

<div class="tab-content"> 

    <!-- Tab panes --> 
    <form class="tab-pane fade in active" id="demographics" method="post" > 
     <input type="hidden" name="form_id" value="demographics"> 
     {%crispy frm%} 
    </form> 
    <form class="tab-pane fade" id="diagnosis" method="post"> 
     <input type="hidden" name="form_id" value="diagnosis"> 
     {%crispy frm_d%} 
    </form> 
</div> 
+0

가능한 중복 http://stackoverflow.com/questions/1395807/proper-way-to-handle-multiple -forms-on-one-page-in-django) – madzohan

+0

사실, OP는 같은 양식의 두 항목을 모두 제출하려고하고 링크 된 질문은 같은 페이지에서 여러 항목을 처리하는 것과 관련되어 있습니다! –

+0

"각 양식을 독립적으로 저장하려고 시도하는 중 ... 각 양식에 제출 단추가 있습니다." – Brandon

답변

4

먼저 게시 된 형태로 지정되는, 양식의 각에 숨겨진 입력을 추가 할 수 있습니다.

편집 :

def input(request): 
    context = RequestContext(request) 
    if request.method == 'POST': 
     submitted = request.POST.get('form_id', '') 

     if submitted == 'demographics': 
      # Get the Form1 instance 
      my_demographics = DemographicForm(request.POST) 
      if my_demographics.is_valid(): 
       my_demographics_object= my_demographics.save() 
       my_diagnosis=DiagnosisForm({'patient': my_demographics_object.patient_id}) 
      else: 
       my_diagnosis=DiagnosisForm() 

     elif submitted == 'diagnosis': 
      # Get the Form2 instance 
      my_diagnosis = DiagnosisForm(request.POST) 
      if my_diagnosis.is_valid(): 
       my_diagnosis.save() 
       # here you should redirect 

      my_demographics = DemographicForm() 

     else: 
      raise ValueError('No form specified !') 

    else: 
     my_demographics = DemographicForm() 
     my_diagnosis = DiagnosisForm() 

    return render_to_response(
     'input.html', 
     {'frm':my_demographics, 'frm_d': my_diagnosis}, 
     context 
     ) 
[장고에 한 페이지에 여러 양식을 처리 할 수있는 적절한 방법] (의
+0

이것은 정답이며 받아 들여야합니다. – Brandon

+0

게시 된 양식을 확인하려면 어떻게해야합니까? – zinon

+0

'form_id = request.POST.get ('form_id')'request.POST는 사전이므로 static 메소드 .get()을 사용할 수 있습니다. 값이 사전에 없으면 '없음'이 반환됩니다. – Brandon

0

제출 된 형태로 내부에 있던 입력 이름을 갖 뷰는, 그 방법을 지금, 그래서이다 숨겨진 필드를 추가하고 그 값을 검사 할 수 있습니다. form1 또는 form2 인 경우 마녀 1이 제출되었음을 알 수 있습니다! ,보기에 그런

<div class="tab-content"> 

    <!-- Tab panes --> 
    <form class="tab-pane fade in active" id="demographics" method="post" > 
     <input type="hidden" name="form_id" value="demographics"> 
     {%crispy frm%} 
    </form> 
    <form class="tab-pane fade" id="diagnosis" method="post"> 
     <input type="hidden" name="form_id" value="diagnosis"> 
     {%crispy frm_d%} 
    </form> 
</div> 

을 게시하는 형태로 확인 만이 양식을 저장합니다

if request.POST: 
    # Get the form submitted 
    submitted = request.POST.get('form_name', '') 

    if submitted == 'form1' 
     # Get the Form1 instance 
     form = Form1Model(request.POST) 

    elif submitted == 'form2' 
     # Get the Form2 instance 
     form = Form2Model(request.POST) 
    else: 
     raise ValueError('No form specified !') 

    # Validate the form 
    if form.is_valid(): 
     # If the form is valid save it 
     if form.save(): 
      # correct data entry 
      messages.info(
       request, 
       _(u"Fichier copié sur le DHS, mise à jour en cours ...") 
      ) 
     else: 
      # Can't save the form 
      messages.warning(
       request, 
       _(u"Un problème est survenu pendant l'enregistrement " 
        u"des données, merci de réessayer plus tard.") 
      ) 
    else: 
     # Form is not valid, show feedback to the user 
     messages.error(
      request, 
      _(u"Merci de corriger les erreurs suivantes.") 
     ) 
else: 
    # Empty forms this is the first call 
    form1 = Form1Model() 
    form2 = Form2Model() 

    # Disclaimer 
    messages.warning(
     request, 
     _(u"L'interface web sera inaccessible durant la mise à jour.") 
    ) 
+0

아니요, 그렇지 않습니다. 보기는 제출 된 양식을 알지 못합니다. POST가 발생했음을 알고 있습니다. 양식은 매개 변수로 식별되어야하며, 뷰는 게시물을 처리 할 때이를 결정할 수 있습니다. – Brandon

+0

예, 양식 입력을 게시하는 양식 내에서 제출을 누르면 기본 HTML 사양입니다. –

+0

그리고 그 견해는 정확히 어떻게 알 수 있습니까? – Brandon

관련 문제