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にデバッグステートメントを入れました。私は、データと初期データの両方を取得しています。
私は数日間このことに苦労しています。私のフォームにデータを入力してデータを整理する方法についての助けは素晴らしいでしょう。
私はそれをしました。フォームが縛られていないと不平を言っていました。そして、BaseFormSetでは、isBoundは次のように設定されています - self.is_bound = dataはNoneではないか、filesはNoneではありません。だから私はフォームがバインドされるようにデータを渡すようになりました。 is_validでは、self.is_bound == trueの場合に最初にチェックします。そうでない場合はfalseを返します。 – Scooby
POSTを処理するビューとテンプレートを共有できますか? –
元の投稿を更新しました。 format(formset.data、formset.as_table())as_tableは、初期データなしで行を出力しています。 – Scooby