我一直收到错误:
[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
,我有。我认为这很容易解决,但我无法弄清楚问题。
答案 0 :(得分: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)
有关详细信息,请参阅using an inline formset in a view上文档中的示例。
如果workout
和exercise
是您的模型,则应遵循python约定并将其重命名为Workout
和Exercise
。小写workout
应该是表单集中所有练习都链接到的实例。
答案 1 :(得分:5)
我遇到了这个问题。
原因是form-TOTAL_FORMS, form-INITIAL_FORMS and form-MAX_NUM_FORMS)
数据中没有POST
这样的内容。
您应该使用{{ formset.as_p }}
,这将从formset中呈现management_form数据。如果要进行自定义formset呈现,则不应忘记formset的management_form,以使POST数据与mangement_form数据一致。
答案 2 :(得分:0)
更改此:
formset = WorkoutInlineFormSet(request.POST)
对此:
formset = WorkoutInlineFormSet(request.POST or None, request.FILES or None)