---
title: "モデル _meta API"
version: 6.0
locale: ja
source: https://docs.djangoproject.com/ja/6.0/ref/models/meta/
canonical: https://djangodocs.dev/ja/6.0/ref/models/meta/
---
# モデル `_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`](/ja/6.0/ref/models/fields/#django.db.models.ForeignKey.related_query_name)、ユーザーが設定した [`related_name`](/ja/6.0/ref/models/fields/#django.db.models.ForeignKey.related_name)、Django が自動生成した名前のいずれかになります。

[`隠しフィールド`](/ja/6.0/ref/models/fields/#django.db.models.Field.hidden) は、名前では取得できません。

与えられた名前のフィールドが見つからなかったときは、[`FieldDoesNotExist`](/ja/6.0/ref/exceptions/#django.core.exceptions.FieldDoesNotExist) 例外が発生します。

```pycon
>>> 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()` は [`隠しフィールド`](/ja/6.0/ref/models/fields/#django.db.models.Field.hidden) を含みます。

```pycon
>>> 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>)
```

### モデルの主キーを構成するフィールドを取得する

> **New in Django 5.2**

#### `Options.pk_fields`

モデルの主キーを構成するフィールドのリストを返します。

モデルに [`複合主キー`](/ja/6.0/ref/models/fields/#django.db.models.CompositePrimaryKey) が定義されている場合、複合主キーで参照されたすべての [`fields`](/ja/6.0/ref/models/fields/#django.db.models.Field) が含まれます。

```python
from django.db import models

class TenantUser(models.Model):
    pk = models.CompositePrimaryKey("tenant_id", "id")
    tenant_id = models.IntegerField()
    id = models.IntegerField()
```

```pycon
>>> TenantUser._meta.pk_fields
[
    <django.db.models.fields.IntegerField: tenant_id>,
    <django.db.models.fields.IntegerField: id>
]
```

それ以外の場合、 モデルの [`主キー`](/ja/6.0/ref/models/fields/#django.db.models.Field.primary_key) として宣言された単一の値が含まれます。

```pycon
>>> User._meta.pk_fields
[<django.db.models.fields.AutoField: id>]
```
