---
title: "モデルフォーム"
version: 6.0
locale: ja
source: https://docs.djangoproject.com/ja/6.0/ref/forms/models/
canonical: https://djangodocs.dev/ja/6.0/ref/forms/models/
---
# モデルフォーム

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

## モデルフォームの `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`](#django.forms.ModelFormOptions.model) と、それから [`fields`](#django.forms.ModelFormOptions.fields) または [`exclude`](#django.forms.ModelFormOptions.exclude) のいずれかです。その他の `Meta` 属性の設定は任意です。

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

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

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

### `error_messages`

#### `ModelFormOptions.error_messages`

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

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

### `exclude`

#### `ModelFormOptions.exclude`

フォームから除外する [`model`](#django.forms.ModelFormOptions.model) のフィールド名のタプルまたはリスト。

[`fields`](#django.forms.ModelFormOptions.fields) または [`exclude`](#django.forms.ModelFormOptions.exclude) のいずれかの設定が必要です。どちらも設定されない場合は [`ImproperlyConfigured`](/ja/6.0/ref/exceptions/#django.core.exceptions.ImproperlyConfigured) 例外が送出されます。 [`exclude`](#django.forms.ModelFormOptions.exclude) を設定して [`fields`](#django.forms.ModelFormOptions.fields) を設定しない場合 [`exclude`](#django.forms.ModelFormOptions.exclude) で指定していないすべてのモデルフィールドをフォームに含めます。

### `field_classes`

#### `ModelFormOptions.field_classes`

モデルフィールド名に対して [`Field`](/ja/6.0/ref/forms/fields/#django.forms.Field) クラスを対応づける辞書。これは、モデルフィールドの [`Field.formfield()`](/ja/6.0/ref/models/fields/#django.db.models.Field.formfield) メソッドで使用される `form_class` をオーバーライドします。

値が指定されていないフィールドについて、 Djangoはモデルフィールドの [デフォルトのフィールドクラス](/ja/6.0/topics/forms/modelforms/#model-form-field-types) を適用します。

### `fields`

#### `ModelFormOptions.fields`

フォームに含める [`model`](#django.forms.ModelFormOptions.model) のフィールド名のタプルまたはリスト。値を `'__all__'` にすると、すべてのフィールドを含むよう設定されます。

[`exclude`](#django.forms.ModelFormOptions.exclude) で指定したフィールドは、 [`fields`](#django.forms.ModelFormOptions.fields) に指定してもフォームに含まれることはありません。

[`fields`](#django.forms.ModelFormOptions.fields) または [`exclude`](#django.forms.ModelFormOptions.exclude) のいずれかの設定が必要です。どちらも設定されない場合は [`ImproperlyConfigured`](/ja/6.0/ref/exceptions/#django.core.exceptions.ImproperlyConfigured) 例外が送出されます。

### `formfield_callback`

#### `ModelFormOptions.formfield_callback`

モデルフィールドを受け取り [`django.forms.Field`](/ja/6.0/ref/forms/fields/#django.forms.Field) オブジェクトを返す関数または呼び出し可能オブジェクト。

### `help_texts`

#### `ModelFormOptions.help_texts`

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

指定されていないフィールドについては、 Django はモデルフィールドの [`help_text`](/ja/6.0/ref/models/fields/#django.db.models.Field.help_text) を適用します。

### `labels`

#### `ModelFormOptions.labels`

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

指定されていないフィールドについては、 Django はモデルフィールドの [`verbose_name`](/ja/6.0/ref/models/fields/#django.db.models.Field.verbose_name) 、ついでフィールドの属性名を適用します。

### `localized_fields`

#### `ModelFormOptions.localized_fields`

ローカライズする [`model`](#django.forms.ModelFormOptions.model) のフィールド名のタプルまたはリスト。値を `'__all__'` にすると、すべてのフィールドがローカライズされます。

デフォルトでは、フォームフィールドはローカライズされません。詳細は  [フィールドのローカライズを有効にする](/ja/6.0/topics/forms/modelforms/#modelforms-enabling-localization-of-fields) を参照してください。

### `model`

#### `ModelFormOptions.model`

必須。 [`ModelForm`](/ja/6.0/topics/forms/modelforms/#django.forms.ModelForm) に使用する [`django.db.models.Model`](/ja/6.0/ref/models/instances/#django.db.models.Model) を指定します。

### `widgets`

#### `ModelFormOptions.widgets`

フィールド名に対して [`django.forms.Widget`](/ja/6.0/ref/forms/widgets/#django.forms.Widget) を対応づける辞書。

指定されていないフィールドについては、 Django はそのフィールドの [`django.db.models.Field`](/ja/6.0/ref/models/fields/#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`](/ja/6.0/topics/forms/modelforms/#django.forms.ModelForm) を返します。必要に応じて `form` 引数を渡すことで、`ModelForm` を構築する開始地点として使うことができます。

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

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

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

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

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

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

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

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

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

使用例は [ModelForm factory 関数](/ja/6.0/topics/forms/modelforms/#modelforms-factory) を参照してください。

フィールドのリストは、キーワード引数 `fields` や `exclude`、もしくはフォームの内部の `Meta` クラスで対応する属性を使って、明示的に提供する必要があります。詳しくは [使うフィールドを選択する](/ja/6.0/topics/forms/modelforms/#modelforms-selecting-fields) を参照してください。使うフィールドの定義を省略すると、[`ImproperlyConfigured`](/ja/6.0/ref/exceptions/#django.core.exceptions.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()`](#django.forms.models.modelform_factory) を通して引き渡されます。

引数 `formset`, `extra`, `can_delete`, `can_order`, `max_num`, `validate_max`, `min_num`, `validate_min`, `absolute_max`, `can_delete_extra`, および `renderer` は [`formset_factory()`](/ja/6.0/ref/forms/formsets/#django.forms.formsets.formset_factory) にそのまま渡されます。詳細については [フォームセット](/ja/6.0/topics/forms/formsets/) を参照してください。

`edit_only` 引数は [新しいオブジェクトの作成を防ぐ](/ja/6.0/topics/forms/modelforms/#model-formsets-edit-only) のに使用できます。

使用例は [モデルのフォームセット](/ja/6.0/topics/forms/modelforms/#model-formsets) を参照してください。

### `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`](/ja/6.0/topics/forms/modelforms/#django.forms.models.BaseInlineFormSet)、`can_delete=True`、`extra=3` をデフォルトとする、 [`modelformset_factory()`](#django.forms.models.modelformset_factory) を使った `InlineFormSet` を返します。

モデルが `parent_model` に複数の [`ForeignKey`](/ja/6.0/ref/models/fields/#django.db.models.ForeignKey) を持つ場合,  `fk_name` を指定する必要があります。

使用例は [インラインフォームセット](/ja/6.0/topics/forms/modelforms/#inline-formsets) を参照してください。
