モデル _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>)
Back to Top