我已经删除了之前的问题,并发布了一个新问题,因为经过几次简化后,我使代码更简洁,以减少可能的原因(具体来说,我删除了重组部分)< / p>
我使用Django无尽的分页(Twitter风格)来渲染Django formset表。一切正常,直到我尝试保存用户输入并以MultiValueDictKeyError: "u'form-10-id'"
结束。请注意,它不是“你好 - 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无法找到隐藏的字段。但我不知道如何解决它