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>
twitter 2009-10-18 23:25:40.158288

参照サイト

Recent Updates

URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Markdownの入力補助"wmd"をAdmin siteで使う
ModelFormでfieldのwidgetを変更する
動的なformを作る 6 - Dynamic Inline Admin site編
Formsetsを使う3 - inlineformset_factory編
動的なformを作る 5 - django-dynamic-formset編
Formクラスからメディアを定義する
複数のmodelを結合する 2 - Proxy model編
複数のmodelを結合する 1
ModelFormでfieldの表示順番を変える
Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更する
Admin siteのlist_displayをカスタマイズする - リンク編
Admin siteのlist_displayをカスタマイズする - 基本編
Admin siteのTextareaの高さを自在に変更する - admin.py編