2012-10-13 7 views
15

改ざんされている私はエラーを取得しておいてください。ジャンゴManagementFormデータが欠落しているか

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

私はなぜどちらかを把握することはできません。ここ

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

そして、私のテンプレートです:

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

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

私はあなたがformset.management_formを含める必要があること読んだ、と私は持っているが、ここに私の見解です。私はそれが簡単な修正だと思ったが、私は問題を理解することができなかった。

+0

正しいテンプレートを表示していますか?送信ボタンがないようです。 – Rohan

+0

テンプレートのフォームセット名に誤字がないかどうかを確認してください。 – maazza

答えて

5

インラインformsetを使用する場合は、オブジェクトが関連するインスタンスを提供する必要があります。

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

詳細については、using an inline formset in a viewのドキュメントの例を参照してください。

workoutexerciseのモデルの場合は、Pythonの規則に従って、WorkoutExerciseの名前を変更する必要があります。小文字のworkoutは、フォームセット内のすべての演習がリンクされているインスタンスにする必要があります。

+0

まだ同じエラーです。エラーは、request.method == "POST"の下のformsetの宣言中に発生しています –

+0

私の変更を行った後、コードをリロードして、もう一度送信する前に新しい要求を出しましたか?あなたの提案された変更を要求したときに、あなたの質問をhtml出力に更新してください。 – Alasdair

+0

私はそれを更新しました –

4

私はこの問題を抱えています。

あなたのPOSTデータにはform-TOTAL_FORMS, form-INITIAL_FORMS and form-MAX_NUM_FORMS)のようなものはありません。

{{ formset.as_p }}を使用すると、formsetのmanagement_formデータがレンダリングされます。カスタムフォームセットのレンダリングを行う場合は、formsetのmanagement_formを忘れて、POSTデータにmangement_formデータを持たせるべきです。

関連する問題