Django: モデルクラスから自動的にフォームクラスを生成する方法

2010年3月21日

Djangoでは、モデルを定義するとそのままフォームを生成してくれる機能があります。 ModelFormという機能で、以下のように自動生成したいフォームクラスのメタクラスに、実際にデータが保存されるモデルクラス名を指定するだけです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from django.forms import ModelForm 
from django.db import models 

class Mail(models.Model): 
    name = CharField() 
    address = EmailField(blank=True, null=True , help_text=u"please input email address.")
    time = DateTimeField(blank=True, null=True) 

class MailForm(ModelForm): 
    class Meta: 
        model = Mail 
        fields = ('name', 'address') 
        # exclude = ('time')

上記例では、Mailモデルクラス用のフォームMailFormをModelFormの機能を利用して作成しています。 MailFormの自動生成を行う上で最低限必要な設定は「model = Mail」のみで、fieldsexcludeは フォームとして生成したくないカラムが派生元のモデルクラス(ここではMail)に存在する場合に限って使います。  

help_text属性には、文字列を定義します。
これは、フォームを生成した際の小見出し部分に表示される 文字列に該当します。 また、モデル側で「blank=True, null=True」と設定したカラムはフォームが生成された際に、 必須フィールドではなくなります。

つまり、formsの「required=False」と同じです。 なお、この機能はDjango v1.0からの機能であり、それ以前はform_for_model()なるメソッドが 存在していたようです。現在は、上記方法が正しいので注意してください。