模型 _meta API

class Options

模型 _meta API 是 Django ORM 的核心。它使系统的其他部分(如查找、查询、表单和管理员)能够理解每个模型的功能。可以通过每个模型类的 _meta 属性访问该 API,该属性是 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() 接受两个参数,可用于控制返回哪些字段

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>)
返回顶部