モデルフォーム

ModelForm API リファレンス。 ModelForm の使用に関する入門的な資料は、トピックガイドの モデルからフォームを作成する を参照してください。

モデルフォームの Meta API

class ModelFormOptions[ソース]

_meta API は Django モデルを反映したフォームを構築するために使用されます。これは django.forms.models.ModelFormOptions インスタンスであり、各モデルフォームの _meta 属性を通じてアクセスできます。

生成されるフォームの構造は、内部の Meta クラスの属性としてメタデータオプションを定義することでカスタマイズできます。以下がその例です。

from django.forms import ModelForm
from myapp.models import Book


class BookForm(ModelForm):
    class Meta:
        model = Book
        fields = ["title", "author"]
        help_texts = {
            "title": "The title of the book",
            "author": "The author of the book",
        }
        # ... other attributes

必要な属性は、まず model と、それから fields または exclude のいずれかです。その他の Meta 属性の設定は任意です。

localized_fieldsformfield_callback を除く設定任意の属性には、モデルフィールド名をキーとしてそれぞれの値に対応づけた辞書型を指定してください。指定した辞書に定義されていないフィールドについては、そのフィールドのデフォルト値が適用されます。

無効なフィールド名に対する挙動

任意の辞書属性に無効または除外されたフィールド名を指定しても、出力しないフィールドにはアクセスされないので効果はありません。

無効なメタクラス属性に対する挙動

Meta クラスにはどんな属性も定義することができます。タイプミスや不正確な属性名によってエラーが送出されることはありません。

error_messages

ModelFormOptions.error_messages

モデルフィールド名をキーとする辞書であり、その値としてエラーメッセージキー( nullblankinvalidunique など)とカスタムエラーメッセージをフィールドごとに対応付けた辞書を持ちます。

指定されていないフィールドについては、 Django はそのモデルフィールドの django.db.models.Field.error_messages に定義されたエラーメッセージで代用するか、最終的にはそのフィールド型のデフォルトエラーメッセージを適用します。

exclude

ModelFormOptions.exclude

フォームから除外する model のフィールド名のタプルまたはリスト。

fields または exclude のいずれかの設定が必要です。どちらも設定されない場合は ImproperlyConfigured 例外が送出されます。 exclude を設定して fields を設定しない場合 exclude で指定していないすべてのモデルフィールドをフォームに含めます。

field_classes

ModelFormOptions.field_classes

モデルフィールド名に対して Field クラスを対応づける辞書。これは、モデルフィールドの Field.formfield() メソッドで使用される form_class をオーバーライドします。

値が指定されていないフィールドについて、 Djangoはモデルフィールドの デフォルトのフィールドクラス を適用します。

fields

ModelFormOptions.fields

フォームに含める model のフィールド名のタプルまたはリスト。値を '__all__' にすると、すべてのフィールドを含むよう設定されます。

exclude で指定したフィールドは、 fields に指定してもフォームに含まれることはありません。

fields または exclude のいずれかの設定が必要です。どちらも設定されない場合は ImproperlyConfigured 例外が送出されます。

formfield_callback

ModelFormOptions.formfield_callback

モデルフィールドを受け取り django.forms.Field オブジェクトを返す関数または呼び出し可能オブジェクト。

help_texts

ModelFormOptions.help_texts

フィールド名に対してヘルプテキスト文字列を対応づける辞書。

指定されていないフィールドについては、 Django はモデルフィールドの help_text を適用します。

labels

ModelFormOptions.labels

フィールド名に対してラベル文字列を対応づける辞書。

指定されていないフィールドについては、 Django はモデルフィールドの verbose_name 、ついでフィールドの属性名を適用します。

localized_fields

ModelFormOptions.localized_fields

ローカライズする model のフィールド名のタプルまたはリスト。値を '__all__' にすると、すべてのフィールドがローカライズされます。

デフォルトでは、フォームフィールドはローカライズされません。詳細は フィールドのローカライズを有効にする を参照してください。

model

ModelFormOptions.model

必須。 ModelForm に使用する django.db.models.Model を指定します。

widgets

ModelFormOptions.widgets

フィールド名に対して django.forms.Widget を対応づける辞書。

指定されていないフィールドについては、 Django はそのフィールドの django.db.models.Field 型に対応するデフォルトウィジェットを適用します。

モデルフォームファクトリ関数

modelform_factory

modelform_factory(model, form=ModelForm, fields=None, exclude=None, formfield_callback=None, widgets=None, localized_fields=None, labels=None, help_texts=None, error_messages=None, field_classes=None)[ソース]

与えられた model に対して ModelForm を返します。必要に応じて form 引数を渡すことで、ModelForm を構築する開始地点として使うことができます。

fields は、フィールド名の省略可能なリストです。提供された場合、指定されたフィールドだけが、返されるフィールドの中に含まれるようになります。

exclude は、フィールド名の省略可能なリストです。提供された場合、fields 引数の中に指定されていたとしても、指定されたフィールドが返されるフィールドから除かれます。

formfield_callback は、モデルフィールドを取ってフォームフィールドを返す callable です。

widgets は、ウィジェットにマッピングされたモデルフィールド名のディクショナリです。

localized_fields は、ローカライズされるべきフィールドの名前のリストです。

labels は、ラベルにマッピングされたモデルフィールド名のディクショナリです。

help_texts は、ヘルプテキストにマッピングされたモデルフィールド名のディクショナリです。

error_messages は、エラーメッセージにマッピングされたモデルフィールド名のディクショナリです。

field_classes は、フォームフィールドクラスにマッピングされたモデルフィールド名のディクショナリです。

使用例は ModelForm factory 関数 を参照してください。

フィールドのリストは、キーワード引数 fieldsexclude、もしくはフォームの内部の Meta クラスで対応する属性を使って、明示的に提供する必要があります。詳しくは 使うフィールドを選択する を参照してください。使うフィールドの定義を省略すると、ImproperlyConfigured 例外を引き起こします。

modelformset_factory

modelformset_factory(model, form=ModelForm, formfield_callback=None, formset=BaseModelFormSet, extra=1, can_delete=False, can_order=False, max_num=None, fields=None, exclude=None, widgets=None, validate_max=False, localized_fields=None, labels=None, help_texts=None, error_messages=None, min_num=None, validate_min=False, field_classes=None, absolute_max=None, can_delete_extra=True, renderer=None, edit_only=False)[ソース]

与えられた model クラスに対して、FormSet クラスを返します。

引数 modelformfieldsexcludeformfield_callbackwidgetslocalized_fieldslabelshelp_textserror_messagesfield_classes は、すべて modelform_factory() を通して引き渡されます。

引数 formset, extra, can_delete, can_order, max_num, validate_max, min_num, validate_min, absolute_max, can_delete_extra, および rendererformset_factory() にそのまま渡されます。詳細については フォームセット を参照してください。

edit_only 引数は 新しいオブジェクトの作成を防ぐ のに使用できます。

使用例は モデルのフォームセット を参照してください。

inlineformset_factory

inlineformset_factory(parent_model, model, form=ModelForm, formset=BaseInlineFormSet, fk_name=None, fields=None, exclude=None, extra=3, can_order=False, can_delete=True, max_num=None, formfield_callback=None, widgets=None, validate_max=False, localized_fields=None, labels=None, help_texts=None, error_messages=None, min_num=None, validate_min=False, field_classes=None, absolute_max=None, can_delete_extra=True, renderer=None, edit_only=False)[ソース]

formset=BaseInlineFormSetcan_delete=Trueextra=3 をデフォルトとする、 modelformset_factory() を使った InlineFormSet を返します。

モデルが parent_model に複数の ForeignKey を持つ場合, fk_name を指定する必要があります。

使用例は インラインフォームセット を参照してください。