Formsetsを使う1 - formset_factory編
Formsetsとは
複数入力できるformを生成する仕組みです。
formset_factoryとは
formオブジェクトを基にformsetsを生成する関数です。
ドキュメントを実行してみる
まずformオブジェクトを作成します。
>>>from django import forms
>>>class ArticleForm(forms.Form):
... title = forms.CharField()
... pub_date = forms.DateField()
このArticleFormオブジェクトを使って複数入力できるようformsetsを使用します。
ここではテーブル形式で2つ表示してみます。
>>>from django.forms.formsets import formset_factory
>>>ArticleFormset = formset_factory(ArticleForm, extra = 2)
>>>formsets = ArticleFormset()
>>>for form in formsets.forms:
>>>... print(form.as_table())
出力されたHTMLは以下の通りです。
<tr><th><label for="id_form-0-title">Title:</label></th>
<td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr>
<tr><th><label for="id_form-0-pub_date">Pub date:</label></th>
<td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>
<tr><th><label for="id_form-1-title">Title:</label></th>
<td><input type="text" name="form-1-title" id="id_form-1-title" /></td></tr>
<tr><th><label for="id_form-1-pub_date">Pub date:</label></th>
<td><input type="text" name="form-1-pub_date" id="id_form-1-pub_date" /></td></tr>
次に最大表示数を含めた状態でHTMLを表示してみます。
>>>from django.forms.formsets import formset_factory
>>>ArticleFormset = formset_factory(ArticleForm, extra = 5, max_num = 1)
>>>formsets = ArticleFormset()
>>>for form in formsets.forms:
>>>... print(form.as_table())
HTMLです。
<tr><th><label for="id_form-0-title">Title:</label></th>
<td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr>
<tr><th><label for="id_form-0-pub_date">Pub date:</label></th>
<td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>