试图保存我的 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 }}
.
所以,一个完整的 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 }}
.