Management form error when using modelformsets ("ManagementForm data is missing or has been tampered with")

I have a models.py class as shown below

class Educational_Qualification(models.Model): user = models.ForeignKey(User) exam = models.CharField(max_length=40) pass_month = models.CharField(max_length=40) 

I have view.py as below

 def create_qualification(request): QFormSet = modelformset_factory(Educational_Qualification, extra=3, exclude=("user",)) if request.method == "POST": formset = QFormSet(request.POST, request.FILES) if formset.is_valid(): formset.save() for form in formset.forms: if form.is_valid(): quali= form.save(commit=False) quali.user = request.user quali.save() return HttpResponse("Saved") else: return HttpResponse("Snafu") else: formset = QFormSet() return render_to_response("register/edu.html", {"formset":formset}, context_instance=RequestContext(request)) 

When I submit the form, it throws a validation error. stating that ManagementForm data is missing or tampered with "

I have formet.management_form in my template.

What could be the problem?

+6
python django django-forms
source share
2 answers

The error is not in your representations or models, but in the templates.

The correct way to visualize a set of forms:

 <form method="post" action=""> <table> {{ formset }} </table> </form> 

or

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

I assume that you are looping forms in templates, not including the control form?

+24
source share

This also happens if several types are involved, and one of them does not know about the prefix of the set of forms.

Get an idea:

 def someview(request): ... formset = Formset(prefix="foo") ... 

Post view (Potential Ajax form submit handler):

 def ajaxview(request): ... formset = Formset(request.POST, prefix="foo") # here ... 
0
source share

All Articles