模型 _meta API ( options )

模型 _meta API

class  Options [源代码]

模型 _meta API是Django ORM的核心。它使系统的其他部分(如查找,查询,表单和管理员)能够了解每个模型的功能。 API可通过每个模型类的 _meta 属性访问,这是django.db.models.options.Options 对象的实例。

它提供的方法可以用于:

  • 检索模型的所有字段实例

  • 按名称检索模型的单个字段实例

现场访问API

按名称检索模型的单个字段实例

Options. get_field( field_name)

返回给定字段名称的字段实例。

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_fields( include_parents=Trueinclude_hidden=False) [源代码]

返回与模型关联的字段的元组。 get_fields() 接受两个参数,可用于控制返回的字段:

include_parents

默认情况下为 True。递归地包括在父类上定义的字段。如果设置为Falseget_fields() 将只搜索在当前模型上直接声明的字段。来自直接从抽象模型或代理类继承的模型的字段被认为是本地的,而不是父级的。

include_hidden

默认情况下为 False。如果设置为 Trueget_fields() 将包括用于回复其他字段的功能的字段。这还将包括具有以“+”开头的 related_name (例如 ManyToManyField 或ForeignKey)的任何字段。

>>> 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类的其他内容

猜你喜欢

转载自www.cnblogs.com/95lyj/p/9396749.html
今日推荐