# Django 5.0.9.dev20240806133106 ドキュメント

# モデル `_meta` API

class `Options`

モデルの `_meta` API は、Django ORM のコアにあります。これにより、ルックアップ、クエリ、フォーム、admin などのシステムの他のパーツは、各モデルの機能を理解できるようになります。API は、各モデルクラスの `_meta` 属性からアクセス可能で、`django.db.models.options.Options` オブジェクトのインスタンスとなっています。

提供されるメソッドは次のことに利用できます。

- モデルのすべてのフィールドインスタンスを取得する
- モデルの単一のフィールドインスタンスを名前で取得する

## フィールドアクセス API

### モデルの単一のフィールドインスタンスを名前で取得する

`Options.``get_field`(field_name)

  与えられたフィールドの名前を持つフィールドインスタンスを返します。

  `field_name` には、モデル上のフィールド、抽象または継承モデル上のフィールド、そのモデルを指す他のモデル上に定義されたフィールドのいずれかの名前を指定できます。後者の場合、`field_name` は (優先順に) ユーザーが設定した `related_query_name`、ユーザーが設定した `related_name`、Django が自動生成した名前のいずれかになります。

  `隠しフィールド` は、名前では取得できません。

  与えられた名前のフィールドが見つからなかったときは、`FieldDoesNotExist` 例外が発生します。

      >>> from django.contrib.auth.models import User

      # A field on the model
      >>> User._meta.get_field("username")
      <django.db.models.fields.CharField: username>

      # A field from another model that has a relation with the current model
      >>> User._meta.get_field("logentry")
      <ManyToOneRel: admin.logentry>

      # A non existent field
      >>> User._meta.get_field("does_not_exist")
      Traceback (most recent call last):
          ...
      FieldDoesNotExist: User has no field named 'does_not_exist'

### モデルのすべてのフィールドインスタンスを取得する

`Options.``get_fields`(include_parents=True, include_hidden=False)

  モデルに関連するフィールドのタプルを返します。`get_fields()` は、次のように2つの引数を受け取り、どのフィールドを返すのかを制御できます。

  `include_parents`
    デフォルトは `True`。親クラスで定義されたフィールドを再帰的に含めます。`False` に設定した場合、`get_fields()` は現在のモデル上で直接宣言されたフィールドだけを検索します。抽象モデルまたはプロキシークラスから直接継承したモデルからのフィールドは、親ではなくローカルなものとみなされます。
  `include_hidden`
    デフォルトでは `False` です。 `True` に設定すると、 `get_fields()` は `隠しフィールド` を含みます。

      >>> from django.contrib.auth.models import User
      >>> User._meta.get_fields()
      (<ManyToOneRel: admin.logentry>,
       <django.db.models.fields.AutoField: id>,
       <django.db.models.fields.CharField: password>,
       <django.db.models.fields.DateTimeField: last_login>,
       <django.db.models.fields.BooleanField: is_superuser>,
       <django.db.models.fields.CharField: username>,
       <django.db.models.fields.CharField: first_name>,
       <django.db.models.fields.CharField: last_name>,
       <django.db.models.fields.EmailField: email>,
       <django.db.models.fields.BooleanField: is_staff>,
       <django.db.models.fields.BooleanField: is_active>,
       <django.db.models.fields.DateTimeField: date_joined>,
       <django.db.models.fields.related.ManyToManyField: groups>,
       <django.db.models.fields.related.ManyToManyField: user_permissions>)

      # Also include hidden fields.
      >>> User._meta.get_fields(include_hidden=True)
      (<ManyToOneRel: auth.user_groups>,
       <ManyToOneRel: auth.user_user_permissions>,
       <ManyToOneRel: admin.logentry>,
       <django.db.models.fields.AutoField: id>,
       <django.db.models.fields.CharField: password>,
       <django.db.models.fields.DateTimeField: last_login>,
       <django.db.models.fields.BooleanField: is_superuser>,
       <django.db.models.fields.CharField: username>,
       <django.db.models.fields.CharField: first_name>,
       <django.db.models.fields.CharField: last_name>,
       <django.db.models.fields.EmailField: email>,
       <django.db.models.fields.BooleanField: is_staff>,
       <django.db.models.fields.BooleanField: is_active>,
       <django.db.models.fields.DateTimeField: date_joined>,
       <django.db.models.fields.related.ManyToManyField: groups>,
       <django.db.models.fields.related.ManyToManyField: user_permissions>)