2010-07-10 7 views
6

Mam klasy models.py jak poniżejbłąd forma zarządzania podczas korzystania modelformsets („dane ManagementForm brakuje lub została naruszona”)

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

Mam views.py jak poniżej

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

Po przesłaniu formularza powoduje zgłoszenie błędu sprawdzania poprawności. stwierdzenie, że brakuje danych ManagementForm lub zostało zmienione "

Mam formset.management_form w moim szablonie.

Co może być problemem?

Odpowiedz

24

Błąd nie występuje w widokach ani modelach, ale w szablonach.

Właściwy sposób, aby uczynić formset jest:

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

lub

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

Chyba, jesteś zapętlenie nad formularzami w tym szablonów bez formy zarządzania?

+0

Dzięki, ten sam rozwiązać mój problem! – vdboor

+0

niesamowite! dzięki: D – DanH

0

Dzieje się tak również w przypadku wielu widoków, a jeden z nich nie zna prefiksu formularza. Widok

otrzymujemy:

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

Zobacz post (potencjalnie złożyć formularz Ajax obsługi):

def ajaxview(request): 
... 
    formset = Formset(request.POST, prefix="foo") # here 
... 
Powiązane problemy