モデル _meta
API¶
モデルの _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>)