Model _meta API —Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/ref/models/meta
移動先:案内検索

モデル_meta API

class Options

モデル_meta APIは、DjangoORMの中核です。 これにより、ルックアップ、クエリ、フォーム、管理者など、システムの他の部分が各モデルの機能を理解できるようになります。 APIには、django.db.models.options.Optionsオブジェクトのインスタンスである各モデルクラスの_meta属性を介してアクセスできます。

それが提供するメソッドは、次の目的で使用できます。

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

フィールドアクセス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

デフォルトではFalseTrueに設定すると、get_fields()には、他のフィールドの機能をバックアップするために使用されるフィールドが含まれます。 これには、「+」で始まるrelated_nameManyToManyFieldForeignKey など)を持つフィールドも含まれます。

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