_meta
API¶模型 _meta
API是Django ORM的核心。它使系统的其他部分(如查找、查询、表单和管理)能够了解每个模型的功能。API可通过 _meta
每个模型类的属性,它是 django.db.models.options.Options
对象。
它提供的方法可用于:
检索模型的所有字段实例
按名称检索模型的单个字段实例
返回给定字段名称的字段实例。
field_name
可以是模型上字段的名称、抽象模型或继承模型上的字段,也可以是在指向模型的其他模型上定义的字段。在后一种情况下, field_name
将(按优先顺序)为 related_query_name
由用户设置, related_name
由用户设置,或由Django自动生成的名称。
Hidden fields
无法按名称检索。
如果未找到具有给定名称的字段 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'
返回与模型关联的字段的元组。 get_fields()
接受两个可用于控制返回哪些字段的参数:
include_parents
True
默认情况下。递归地包括在父类上定义的字段。如果设置为 False
, get_fields()
将只搜索直接在当前模型上声明的字段。直接从抽象模型或代理类继承的模型中的字段被视为本地字段,而不是父类字段。
include_hidden
False
默认情况下。如果设置为 True
, get_fields()
将包括 hidden 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>)
7月 22, 2024