我已经删除了之前的问题,并发布了一个新问题,因为在进行了几次简化后,我使代码更简洁,以减少可能原因的数量(具体来说,我已经删除了重组部分)
我使用 Django 无限分页(Twitter 样式)来呈现 Django 表单集表。一切正常,直到我尝试保存用户输入并以MultiValueDictKeyError: "u'form-10-id'"
. 请注意不是“u'form- 0 -id'”,是10(十),表示问题不是缺少隐藏字段引起的。
模板:
<table>
<thead>...
</thead>
<tbody>
{% load el_pagination_tags %}
{{ my_formset.management_form }}
{% paginate my_formset %}
{% for form in my_formset %}
<tr>
<td>
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
</td>
....
</tr>
{% endfor %}
</tbody>
</table>
处理 AJAX POST 请求以保存数据的视图
def view_for_saving_input(request):
qs = MyModel.objects.filter(...)
FormSet = modelformset_factory(MyModel, form = MyModelForm, can_delete=False, extra = 0)
my_formset = FormSet(request.POST, request.FILES)
# Also tried my_formset = FormSet(request.POST, queryset = qs)
# no difference
for form in my_formset: # MultiValueDictKeyError: "u'form-10-id'"
if form.is_valid():
form.save()
return HttpResponse(True)
如果我{% paginate my_formset %}
从模板中删除从而放弃无休止的分页,一切都很好。我试图交换行{% paginate my_formset %}
和{{ my_formset.management_form }}
,但仍然没有成功(在这种情况下,Django 抛出了一个看似合理的Missing management form
错误。
直观上看,核心原因是因为分页不允许渲染第十种形式,而且很明显,Django 找不到隐藏字段。但我不知道如何解决它