2010-07-10 5 views
6

ho una classe di models.py come di seguitoerrore di forma di gestione durante l'utilizzo modelformsets ('i dati ManagementForm manca o è stato manomesso')

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

Ho un views.py come di seguito

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

Quando invio il modulo, genera l'errore di convalida. i dati ManagementForm sono mancanti o sono stati manomessi '

Ho form.management_form nel mio modello.

Quale potrebbe essere il problema?

risposta

24

L'errore non è nelle visualizzazioni o nei modelli, ma nei modelli.

Il modo giusto per rendere il formset, è:

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

o

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

immagino, voi stanno ciclo sopra le forme nei modelli senza includere il modulo di gestione?

+0

Grazie, questo ha fatto risolvere il mio problema! – vdboor

+0

fantastico! grazie: D – DanH

0

Succede anche se ci sono più viste coinvolte e una di queste non è a conoscenza del prefisso del formset. vista

Get:

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

Visualizza Messaggio (Potenzialmente una forma Ajax presentare handler):

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