2017-01-05 6 views
0

Djangoフォームウィザードとフォームセットを使用してフォームを作成しています。Django formset - データが渡されたときに初期データを設定しない

def get_form(self, step=None, data=None, files=None): 
initial_data_set = [] 
for x in some_list: 
    initial_data_set.append({ 
         'title' : x.title, 
        }) 
data = { 
'form-TOTAL_FORMS': '5', 
'form-INITIAL_FORMS': '5', 
'form-MAX_NUM_FORMS': '', 
} 
formset_class = formset_factory(TitleForm, extra =0) 
formset = formset_class(data=data, initial=initial_data_set) 
return formset 

テンプレート

{% extends "admin/base_site.html" %} 
{% load i18n %} 


{% block content %} 
{% if wizard.form.forms %} 
    {% for form in wizard.form.forms %} 
     {{ form.media }} 
    {% endfor %} 
{% else %} 
    {{ wizard.form.media }} 
{% endif %} 
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p> 
<form action="." method="post" enctype="multipart/form-data">{% csrf_token %} 
<table> 
{{ wizard.management_form }} 
{% if wizard.form.forms %} 
    {{ wizard.form.management_form }} 
    {% for form in wizard.form.forms %} 
     {% if ingestable_upload %} 
      <tr>{{ form.as_inline_table }}</tr> 
     {% else %} 
      {{ form.as_table }} 
     {% endif %} 
    {% endfor %} 
{% else %} 
    {{ wizard.form }} 
{% endif %} 
</table> 
{% if wizard.steps.prev %} 
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "first step" %}</button> 
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "prev step" %}</button> 
{% endif %} 
<input type="submit" value="{% trans "Submit" %}"/> 
</form> 
{% endblock %} 

は、私が「データ」を渡していなかったとき、私の形で初期データを見ることができました。しかし、データを渡さないとformset.is_validがFalseになり、cleaned_dataにNoneが返されました。そこで私はデータ{}を作成し、ここのドキュメントに従ってそれを渡しました。 -

私はデータを渡し始めたので、フォームに初期データが取り込まれていません。 私はBaseFormSet()クラスの下のformsets.pyにデバッグステートメントを入れました。私は、データと初期データの両方を取得しています。

私は数日間このことに苦労しています。私のフォームにデータを入力してデータを整理する方法についての助けは素晴らしいでしょう。

答えて

0

フォームの初期データをデータオブジェクトで上書きしている場合は、データがテンプレートの{{ formset.management_form }}に渡される必要はありません。

フォームに問題があります。 is_validが失敗して何が欠落しているかを見て、エラーを表示することをお勧めします。

+0

私はそれをしました。フォームが縛られていないと不平を言っていました。そして、BaseFormSetでは、isBoundは次のように設定されています - self.is_bound = dataはNoneではないか、filesはNoneではありません。だから私はフォームがバインドされるようにデータを渡すようになりました。 is_validでは、self.is_bound == trueの場合に最初にチェックします。そうでない場合はfalseを返します。 – Scooby

+0

POSTを処理するビューとテンプレートを共有できますか? –

+0

元の投稿を更新しました。 format(formset.data、formset.as_table())as_tableは、初期データなしで行を出力しています。 – Scooby

関連する問題