2010-07-10 5 views
6

Ich habe eine models.py Klasse wie untenManagement-Formfehler während modelformsets mit (‚ManagementForm Daten fehlen oder manipuliert werden‘)

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

Ich habe einen views.py wie unten

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

Wenn ich das Formular abschicke, wirft es den Validierungsfehler auf. das besagt, dass ManagementForm-Daten fehlen oder manipuliert wurden '

Ich habe formset.management_form in meiner Vorlage.

Was könnte das Problem sein?

Antwort

24

Der Fehler ist nicht in Ihren Ansichten oder den Modellen, sondern in den Vorlagen.

Der richtige Weg, um die formset zu machen, ist:

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

oder

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

Ich denke, Sie werden über die Formen in den Vorlagen Looping ohne die Verwaltung Form einschließlich?

+0

Danke, tat dies mein Problem beheben! – vdboor

+0

genial! danke: D – DanH

0

Es passiert auch, wenn mehrere Ansichten beteiligt sind und einer von ihnen das Formset-Präfix nicht kennt.

Get Ansicht:

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

Beitrag Ansicht (Potenziell eine Ajax-Formular-Handler einreichen):

def ajaxview(request): 
... 
    formset = Formset(request.POST, prefix="foo") # here 
... 
Verwandte Themen