试图保存我的 Django 模型表单集,不断出现 ManagementForm 错误?

Trying to save my Django Model Formset, keep getting ManagementForm error?

所以,一个完整的 Django Model Formset Newb 问题。我正在尝试保存我的表格并不断收到此错误:

    ['ManagementForm data is missing or has been tampered with']

这是我的 TemplateView:

  class AttendanceTemplate(TemplateView):

         template_name = 'attendance/index.html'

         def get_context_data(self, **kwargs):
             context = super(AttendanceTemplate, self).get_context_data(**kwargs)
             instruction = Instruction(self.request.user.username)

                 sections_list = self.request.GET.getlist('sections_list')
                 term = self.request.GET.get('term', instruction.term)

                 enrollments = Enrollment.objects.using('wisp').prefetch_related('profile').filter(section_id__in=['111111'], term=term)

                 attendanceQuery = Enrollment.objects.using('wisp').prefetch_related('student').filter(section_id__in=['111111'], term=term)


        for enrollment in attendanceQuery:
           attendance, created = Attendance.objects.update_or_create(
             section_id=enrollment.section_id,
             term=enrollment.term,
             first_name=enrollment.student.first_name,
             last_name=enrollment.student.last_name,
             email_address=enrollment.student.email_address,
        )

    something = Attendance.objects.filter(section_id__in=['111111'], term=term)

    formset = AttendanceFormSet(queryset=something)

    combined = zip(enrollments, formset)

    context['combined'] = combined

    return context

这是我尝试保存表格的方式:

def post(self, request):
    formset = AttendanceFormSet(request.POST)
    if formset.is_valid():
        for thing in formset:
            formset = thing.save()
            return render_to_response("template/index.html",{'formset': formset}, RequestContext(request))
    else:
        return HttpResponse(error.msg)

这是我的模板中的内容:

            <form method="POST" action="">
               {% csrf_token %}
                    {% for enrollment, form in combined %}
                         <div class="wrapper-formset">
                             <div>
                               {{ form.first_name.value }}
                               {{ form.last_name.value }}
                                {{ form.email_address.value }}
                              </div>
                               <div class="clear-all"></div>
                              </div>
                           {% endfor %}
            <button type="submit" class="save btn btn-default">Save</button>
            </form>

我是不是保存表格有误?也许我的循环是错误的?另外,我更喜欢单独打印每个字段,所以使用 "myform.management_Form" 可能对我不起作用? (例如,myform.management_form.field_name)

如果单独呈现表单,则必须在模板中包含管理表单。您正在压缩表格这一事实没有任何区别。

添加管理表单很容易,只需将 {% formset.management_form %} 添加到您的模板即可。

<form method="POST" action="">
    {% csrf_token %}
    {{ formset.management_form }}
    {% for enrollment, form in combined %}
    ...

为此,您需要确保 formset 在模板上下文中,例如:

    context['formset'] = formset

您可能会发现 using model formsets in the template 上的文档很有用。最好从最简单的选项 {{ formset }} 开始,对其进行测试,然后逐渐自定义模板。这使得在出现问题时更容易调试。目前看来您错过了 {{ form.id }}.