# Django 5.2.8 ドキュメント

# モデルフォーム

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

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

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

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

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

### `error_messages`

ModelFormOptions.error_messages

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

  指定されていないフィールドについては、 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 関数 を参照してください。

  フィールドのリストは、キーワード引数 `fields` や `exclude`、もしくはフォームの内部の `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` クラスを返します。

  引数 `model`、`form`、`fields`、`exclude`、`formfield_callback`、`widgets`、`localized_fields`、`labels`、`help_texts`、`error_messages`、`field_classes` は、すべて `modelform_factory()` を通して引き渡されます。

  引数 `formset`, `extra`, `can_delete`, `can_order`, `max_num`, `validate_max`, `min_num`, `validate_min`, `absolute_max`, `can_delete_extra`, および `renderer` は `formset_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=``BaseInlineFormSet`、`can_delete=True`、`extra=3` をデフォルトとする、 `modelformset_factory()` を使った `InlineFormSet` を返します。

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

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