16

我不断收到错误:

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

我也想不通为什么。这是我的看法:

   def CreateWorkout(request):
    WorkoutInlineFormSet = inlineformset_factory(workout,exercise)
    if request.method == "POST" : 
        formset = WorkoutInlineFormSet(request.POST)

        if formset.is_valid(): 
            formset.save(); 
    else: 
        formset = WorkoutInlineFormSet()
    return render_to_response('submit.html',{'formset': formset},context_instance=RequestContext(request))

这是我的模板:

<body>
<form method="POST" action ="">
{{ formset.management_form }}
<table>
 {% for form in formset.forms %}
            {{ form }}
        {% endfor %}

        </table>
</form> 
</body>

我读过你必须包括formset.management_form,我有。我认为这将是一个简单的解决方案,但我一直无法找出问题所在。

4

3 回答 3

7

我遇到了这个问题。

form-TOTAL_FORMS, form-INITIAL_FORMS and form-MAX_NUM_FORMS)原因是您的POST数据中没有类似的东西。

您应该使用{{ formset.as_p }},这将呈现表单集中的 management_form 数据。如果要进行自定义表单集渲染,请不要忘记表单集的 management_form 让 POST 数据与 mangement_form 数据。

于 2015-11-05T09:21:44.700 回答
6

当您使用内联表单集时,您需要提供对象相关的实例。

# First, fetch the instance from the db
workout = code_that_fetches_instance()

if request.method == "POST" : 
    formset = WorkoutInlineFormSet(request.POST, instance=workout)
    ...
else: 
    formset = WorkoutInlineFormSet(instance=workout)

有关更多信息,请参阅文档中关于在视图中使用内联表单集的示例。

如果workout并且exercise是您的模型,则应遵循 python 约定并将它们重命名WorkoutExercise. 小写workout应该是您的表单集中的所有练习都链接到的实例。

于 2012-10-13T22:39:24.510 回答
1

Change this:

  formset = WorkoutInlineFormSet(request.POST)

to this:

 formset = WorkoutInlineFormSet(request.POST or None, request.FILES or None)
于 2019-02-01T01:10:01.000 回答