1

我已经删除了之前的问题,并发布了一个新问题,因为在进行了几次简化后,我使代码更简洁,以减少可能原因的数量(具体来说,我已经删除了重组部分)

我使用 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 找不到隐藏字段。但我不知道如何解决它

4

0 回答 0