问题描述:

I keep getting the error:

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

I can't figure out why either. Here is my view:

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

And here is my template:

<body>

<form method="POST" action ="">

{{ formset.management_form }}

<table>

{% for form in formset.forms %}

{{ form }}

{% endfor %}

</table>

</form>

</body>

I've read that you have to include the formset.management_form, and I have. I thought that would be an easy fix, but I haven't been able to figure out the problem.

网友答案:

When you use inline formset, you need to provide the instance that the objects relate to.

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

See the example in the docs on using an inline formset in a view for more information.

If workout and exercise are your models, you should follow the python convention and rename them Workout and Exercise. Lowercase workout should be the instance that all the exercises in your formset are linked to.

网友答案:

I have meet this problem.

The reason is there is NO something like form-TOTAL_FORMS, form-INITIAL_FORMS and form-MAX_NUM_FORMS) in your POST data.

You should use {{ formset.as_p }}, this will render the management_form data from the formset. If you want to make the custom formset rendering, you should not forget the management_form of the formset to let POST data be with the mangement_form data.

相关阅读:
Top