Django ManagementForm数据丢失或已被篡改

2024-04-19 23:00:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我不断地发现错误:

[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,我也有。我以为那是一个简单的解决办法,但我还没能解决问题。


Tags: orformdataifisrequesttablebody
3条回答

我遇到了这个问题。

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

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

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

# 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)

有关详细信息,请参阅using an inline formset in a view上文档中的示例。

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

更改此:

  formset = WorkoutInlineFormSet(request.POST)

对此:

 formset = WorkoutInlineFormSet(request.POST or None, request.FILES or None)

相关问题 更多 >