2012-03-24 27 views
0

にrequest.POSTデータを返す私はジャンゴmodelformset_factoryDjangoのmodelformset_factory無効、フォーム

ビュー

from django.forms.models import modelformset_factory 

ArticleFormSet = modelformset_factory(Article, extra=2) 
formset = ArticleFormSet(queryset=Article.objects.none()) 

if request.POST: 
    formset = ArticleFormSet(request.POST) 

    if formset.is_valid(): 
     instances = formset.save(commit=False) 
     formset = ArticleFormSet(queryset=instances) 
    else: 
     ## ?? RETURN formset with request.POST data in form ?? 
     pass 

を使用してフォーム内の所定の位置に戻って入力されたデータを返すようにしたいテンプレート

<form method="POST" id="articleForm" action=".">{% csrf_token %} 
    {% for form in forms %} 
    {{form.as_p}} 
    {% endfor %} 
</form> 

Django 1.4を使用しています:

Validation Error: No exception supplied 

initial=request.POSTのバリエーションの範囲を試しましたが、喜びはありませんでした。

ご迷惑をおかけしますようお願い申し上げます。

答えて

0

「管理フォーム」の詳細が自動的に渡されていないかどうかを確認するには、それがなかったことがわかります(ここではhttps://docs.djangoproject.com/en/dev/topics/forms/formsets/#understanding-the-managementform)。

この "管理フォームデータ"をrequest.POSTにコブリングすると、それ以外は謎のvalidationエラーを解決したようです。これは本物の1.4バグですか?私は間違った道を行かない助けるため@Danielローズマンへ

if request.POST: 
    forms_mgmt = {'form-TOTAL_FORMS': u'2', 'form-INITIAL_FORMS': u'0', 'form-MAX_NUM_FORMS': u''} 
    data_dict = dict(request.POST.items() + forms_mgmt.items()) 

    formset = ArticleFormSet(data_dict) 

    if formset.is_valid(): 
     instances = formset.save(commit=False) 
     formset = ArticleFormSet(queryset=instances) 

感謝。 @Williams答えにさらに

0

何もする必要はありません。フォームセットにはすでにPOSTデータが入力されています。テンプレートに渡すだけです。これを行う通常の方法は、else節を持つことではなく、フォームを最初に表示したのと同じレンダー呼び出しにするだけです。

+0

ありがとうございます。これは私が思ったものです。他のバグがあるはずです。 'formset = ArticleFormSet(request.POST)'という行に基づいて 'validation error'を返すので、モデルに問題があると思われますが、単純化されたモデルを試しても同じ問題がありました...私は検索を続けます、 ありがとうございました。 – Williams

+0

完全なトレースバックを投稿できますか?その1行だけではデバッグが難しいです。 –

+0

ありがとう!興味があるなら、ここにトレースバックがあります:http://dpaste.com/hold/720982/ – Williams

0

、あなたは{{ my_formset.management_form }}とテンプレートにレンダリングすることができ、その管理フォームデータを見つけることができますhttps://docs.djangoproject.com/en/dev/topics/forms/formsets/#understanding-the-managementformを読ん:

<form method="POST" id="articleForm" action=".">{% csrf_token %} 
    {% for form in forms %} 
     {{form.as_p}} 
    {% endfor %} 
    {{ my_formset.management_form }} 
</form> 

その後、フォームはあなたが使用することができます掲載された後:

formset = ArticleFormSet(request.POST) 
関連する問題