2012-10-13 23 views
15

Wciąż otrzymuję błąd:dane Django ManagementForm brakuje lub została naruszona

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

Nie mogę zrozumieć, dlaczego obaj. Tu jest mój widok:

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

I tu jest mój szablon:

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

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

Czytałem, że trzeba obejmować formset.management_form i mam. Myślałem, że to łatwa łatka, ale nie udało mi się wymyślić problemu.

+0

Czy wyświetlasz poprawny szablon? Wygląda na to, że nie ma przycisku przesyłania. – Rohan

+0

Sprawdź, czy nie masz literówki w nazwie zestawu w szablonie. – maazza

Odpowiedz

5

Podczas korzystania z wbudowanego zestawu formularzy należy podać instancję, do której odnoszą się obiekty.

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

Patrz przykład w docs na using an inline formset in a view aby uzyskać więcej informacji.

Jeśli workout i exercise są twoje modele, należy postępować zgodnie z konwencją Pythona i ich nazwy Workout i Exercise. Małe litery workout powinny być instancją, z którą połączone są wszystkie ćwiczenia w twoim zestawie formularzy.

+0

Wciąż ten sam błąd. Błąd występuje podczas deklaracji dla formularza pod request.method == "POST" –

+0

Po wprowadzeniu zmian przeładowałeś kod i wykonałeś nowe żądanie przed ponownym przesłaniem? Zaktualizuj swoje pytanie za pomocą danych wyjściowych html, gdy otrzymasz propozycję zmiany z sugerowaną zmianą. – Alasdair

+0

Zaktualizowałem to. –

4

Mam ten problem.

Powód jest taki, że nie ma czegoś takiego jak form-TOTAL_FORMS, form-INITIAL_FORMS and form-MAX_NUM_FORMS) w danych POST.

Należy użyć {{ formset.as_p }}, spowoduje to wyświetlenie danych zarządzania z formularza. Jeśli chcesz utworzyć niestandardowe renderowanie zestawu formularzy, nie powinieneś zapominać o formacji zarządzania formularza, aby dane POST były zgodne z danymi mangement_form.

Powiązane problemy