フォームセット

Last Change: 15-Aug-2015.
author : qh73xe

Django を使用して from を作成する場合, 2つの方法があります. 一つは form class を自作する方法で, もうひとつは モデルフォームセットを使用する方法です.

form class は自分で記述するため,柔軟性に飛んでおり,使用方法もシンプルですが, 例えば, 既存のモデルにとりあえずデータを追記するロジックを記述しようとする場合など, 単純なフォームを作成するのに, これを一々設定するのはかったるいです.

こういう時に使えるのが モデルフォームセットです.

>>> from django.forms.models import modelformset_factory
>>> BookForm = modelform_factory(Book, fields=("author", "title"))
>>> formset = BookForm()

上記の例のように使用すると 該当のモデルのフォームを作成してくれます.

注釈

fields に関して

私は Django 1.8 を使用していますが, このヴァージョンでは fileds の指定が必須になっています. 面倒くさい場合には ‘__all__’ とするとよいです.

これは関数であることから, View で使用するようにしていますが, どこに記述するのかが決まっているわけではなさそうです.

Template

この関数が返すのは formset です. これは Template で少し注意が必要です.

<form method="POST" action="">
    {{ formset.management_form }}
    <table>
        {% for form in formset.forms %}
        {{ form }}
        {% endfor %}
    </table>
</form>

シンプルに form 要素のみを記述していますが, form の中に {{ formset.management_form }} という記述があります. これがないと, view での挙動がうまく行かないので注意です.