2016-03-07 30 views
-1

即時通訊嘗試保存我的表單集中的所有表單,但不通過驗證。這裏是我的代碼MultiValueDictKeyError at/physicians/3/update /「u'form-1-id'」;保存表單集

def UpdatePhysician(request,id): 

physician = get_object_or_404(Physician, id=id) 
SpecialtyFormset = modelformset_factory(PhysicianSpecialties, fields=('specialty',),max_num=1, labels=None,) 
formset = SpecialtyFormset(queryset=PhysicianSpecialties.objects.filter(employee_academic_degree__employee__pk=physician.employee.id)) 



if request.method == "POST": 
    formset = SpecialtyFormset(request.POST,) 
    for form in formset: 
     print(form) 

    if (formset.is_valid()): 

     for form in formset: 
      form.save() 



     return HttpResponse('yesh') 
    else: 
     return HttpResponse('nope') 

return render(request, 'UpdatePhysician.html', { 
               'formset': formset, 
               }) 

它拋出我這樣

錯誤 「MultiValueDictKeyError在/醫生/ 3 /更新/ 」 u'form-1-ID' 「」

編輯

我注意到,當我在formset中僅有1名對象它保存記錄完美

我的模板是

{% extends 'prescription_menu.html' %} 
{% load bootstrap3 %} 
{% load crispy_forms_tags %} 
{% block css %} 
    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}site/css/select2.css"/> 
{% endblock %} 

{% block title %}Physicians{% endblock title %} 

{% block container %} 
    {% csrf_token %} 
<form method="POST"> 
    <div class="row"> 
     <div class="col-md-offset-2 col-md-8"> 
      {{ formset.management_form }} 
      {% for form in formset %} 
       {% crispy form %} 
      {% endfor %} 
      <input type="submit" name="Save" value="Save" class="btn btn-primary" id="submit-id-save"> 
     </div> 
    </div> 
</form> 
{% endblock container %} 
+0

[這個問題]的可能的複製(http://stackoverflow.com/questions/7939010/editing-related-objects-in-modelform/8143709#8143709)。 – Alasdair

+0

如果這沒有幫助,請顯示您的模板。 – Alasdair

+0

感謝您的幫助,但即時通訊有同樣的問題,我的模板如下 –

回答

1

我注意到,當我保存的只是1個記錄它通過驗證,所以它不是該formset,東西在後,所以我意識到,當各種形式呈現的第一個跟隨從形式酥脆佈局佈局,但下一個渲染纏繞在表單標籤,所以我在我的觀點的底部做了一個特殊的佈局類來給佈局我的表單集,它是下列

class SpecialtyFormsetHelper(FormHelper): 
def __init__(self, *args, **kwargs): 
    super(SpecialtyFormsetHelper, self).__init__(*args, **kwargs) 
    self.form_tag = False 
    self.render_required_fields = True 

,最終代碼如下:

def UpdatePhysician(request,id): 

physician = get_object_or_404(Physician, id=id) 
SpecialtyFormset = modelformset_factory(PhysicianSpecialties, fields=('specialty',),max_num=1,) 
formset = SpecialtyFormset(queryset=PhysicianSpecialties.objects.filter(employee_academic_degree__employee__pk=physician.employee.id)) 
helper = SpecialtyFormsetHelper() 
if request.method == "POST": 

    formset = SpecialtyFormset(request.POST,) 
    for form in formset: 
     print(form) 

    if formset.is_valid(): 
     for form in formset: 
      form.save() 

     return HttpResponse('yesh') 
    else: 
     return HttpResponse('nope') 

return render(request, 'UpdatePhysician.html', { 
               'formset': formset, 
               'helper': helper, 
               }) 

,我只是添加幫手到模板渲染

這樣的:

{{ formset.management_form }} 
     {% for form in formset %} 
      {% crispy form helper %} 
     {% endfor %} 

謝謝麥金太爾的幫助:),你是非常有益的