模型 _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>)