模型 _meta
API
-
class
Options
[源代码]
模型 _meta
API是Django ORM的核心。它使系统的其他部分(如查找,查询,表单和管理员)能够了解每个模型的功能。 API可通过每个模型类的 _meta
属性访问,这是django.db.models.options.Options
对象的实例。
它提供的方法可以用于:
-
检索模型的所有字段实例
-
按名称检索模型的单个字段实例
现场访问API
按名称检索模型的单个字段实例
-
返回给定字段名称的字段实例。
field_name
可以是模型上字段的名称,抽象或继承模型上的字段,或在指向模型的另一个模型上定义的字段。在后一种情况下,field_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'
Options.
get_field
(
field_name)
检索模型的所有字段实例
-
返回与模型关联的字段的元组。
get_fields()
接受两个参数,可用于控制返回的字段:-
默认情况下为
True
。递归地包括在父类上定义的字段。如果设置为False
,get_fields()
将只搜索在当前模型上直接声明的字段。来自直接从抽象模型或代理类继承的模型的字段被认为是本地的,而不是父级的。 -
默认情况下为
False
。如果设置为True
,get_fields()
将包括用于回复其他字段的功能的字段。这还将包括具有以“+”开头的related_name
(例如ManyToManyField
或ForeignKey
)的任何字段。
include_parents
include_hidden
>>> 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>)
Option类的一些属性
Options.
app_label
如果模型在
INSTALLED_APPS
中的应用程序之外定义,它必须声明它属于哪个应用程序:app_label = 'myapp'
New in Django 1.9.如果要使用格式
app_label.object_name
或app_label.model_name
表示模型,您可以分别使用model._meta.label
或model._meta.label_lower
。Options.
db_table
要用于模型的数据库表的名称:
-
-
db_table = 'music_album' 表名
-
为了节省时间,Django从模型类的名称和包含它的应用程序的名称中自动导出数据库表的名称。模型的数据库表名是通过将模型的“applabel”(在
manage.py startapp
中使用的名称)连接到模型的类名,并在它们之间加下划线来构建的。例如,如果您有一个应用程序
bookstore
(由manage.py startapp bookstore
创建),定义为class Book
的模型将具有一个名为bookstore_book
的数据库表。要覆盖数据库表名,请使用
class Meta
中的db_table
参数。如果您的数据库表名称是SQL保留字,或包含Python变量名中不允许的字符,特别是连字符 - 没关系。 Django在后台引用列和表名。
其他参数:
option类的其他内容
Options.
get_fields
(
include_parents=True,
include_hidden=False)
[源代码]