2012-10-13 6 views
15

continuo a ricevere l'errore:dati Django ManagementForm manca o è stato manomesso

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

non riesco a capire perché sia. Qui è la mia vista:

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

E qui è il mio modello:

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

     </table> 
</form> 
</body> 

Ho letto che è necessario includere il formset.management_form, e ho. Ho pensato che sarebbe stata una soluzione facile, ma non sono stato in grado di capire il problema.

+0

Stai visualizzando il modello corretto? Non sembra essere il pulsante di invio. – Rohan

+0

controlla se non hai un errore di battitura nel nome del tuo formset nel tuo modello – maazza

risposta

5

Quando si utilizza il modulo in linea, è necessario fornire l'istanza a cui si riferiscono gli oggetti.

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

Vedere l'esempio nei documenti su using an inline formset in a view per ulteriori informazioni.

Se workout e exercise sono i vostri modelli, si dovrebbe seguire la convenzione di pitone e rinominare loro Workout e Exercise. La minuscola workout dovrebbe essere l'istanza a cui sono collegati tutti gli esercizi nel formset.

+0

Ancora lo stesso errore. L'errore si verifica durante la dichiarazione per formset sotto request.method == "POST" –

+0

Dopo aver apportato la mia modifica, hai ricaricato il codice e hai fatto una richiesta di recupero prima di inviarlo di nuovo? Si prega di aggiornare la domanda con l'output html quando si effettua una richiesta di ottenere con la mia modifica suggerita. – Alasdair

+0

L'ho aggiornato –

4

Ho riscontrato questo problema.

Il motivo è NON c'è qualcosa come form-TOTAL_FORMS, form-INITIAL_FORMS and form-MAX_NUM_FORMS) nei dati POST.

È necessario utilizzare {{ formset.as_p }}, ciò renderà i dati di gestione_form dal formset. Se si desidera eseguire il rendering del formset personalizzato, non si deve dimenticare la forma_gestione del formset per consentire ai dati POST di essere associati ai dati mangement_form.

Problemi correlati