Django ManagementForm数据丢失或被篡改

Lil*_*a 5 15 python django

我一直收到错误:

[u'ManagementForm data is missing or has been tampered with']
Run Code Online (Sandbox Code Playgroud)

我也弄不清楚为什么.这是我的观点:

   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))
Run Code Online (Sandbox Code Playgroud)

这是我的模板:

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

        </table>
</form> 
</body>
Run Code Online (Sandbox Code Playgroud)

我已经读过你必须包括formset.management_form,而且我有.我认为这将是一个简单的解决方案,但我无法弄清楚问题.

Ala*_*air 5

使用内联formset时,需要提供对象所涉及的实例.

# 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)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅文档中有关在视图中使用内联formset的示例.

如果workoutexercise是你的模型,你应该遵循蟒蛇会议并重新命名WorkoutExercise.小写workout应该是您的formset中的所有练习都链接到的实例.


小智 5

我遇到了这个问题。

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

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