1. 了解Meta内部类
- 每个模型类(Model)下都有一个子类 Meta,这个子类就是定义元数据的地方。
- Meta 类封装了一些数据库的信息,称之为 Model 的元数据。
- Django 会将 Meta 中的元数据选项定义附加到 Model 中。
- 常见的元数据定义有 db_table(数据表名称)、abstract(抽象类) 、ordering(字段排序) 等,
- Meta 作为内部类,它定义的元数据可以让admin 管理后台对人类更加友好,数据的可读性更高。
Meta 定义的元数据相当于 Model 的配置信息,即不属于 Model 的字段,但是可以用来标识字段一些属性。
2. Meta类选项
- abstract:abstract = True # 定义当前的模型是不是一个抽象类。True表示这个 model 就是一个抽象类
- ordering:排序规则
-
ordering=["add_time"] #按照升序排序 ordering=["-add_time"]#按照降序 ordering=["?add_time"]#随机排序 #同时指定多个字段来进行排序 ordering=['add_time','-last_login_time']#先按升序,在按降序
-
- verbose_name_plural: 模型类的复数名,主要用在管理后台的展示上;不设置的话,Django 会使用小写的模型名作为默认值,并且在结尾加上 s。
- db_table:用于指定数据表的名称
-
#定义该model在数据库中的表名称 db_table = 'Students' #使用自定义的表名,可以通过以下属性 table_name = 'my_owner_table'
-
- app_lable:这个选项只在一种使用情形,就是你的模型不在默认的应用程序包下的 models.py 文件中,这时候需要指定你这个模型是哪个应用程序的 app_label = ‘app_name’。
- managed:它是一个布尔类型的变量,默认为 Ture,代表 Django 会管理数据的生命周期,即利用 Django 提供的 syncdb 和 reset 命令可以完成创建和删除数据表。如果为 False,则不会对此模型执行数据库表创建或删除操作。
- indexs:它是一个列表类型的元数据项,用来定义 Model 的索引,列表中的每一个元素都是 Index 类型的实例。
-
Index 引自 django.db.models.indexes.Index
-
- default_permissions:Django 默认会给每一个定义的 Model 设置三个权限即添加、更改、删除,它使用格式:
default_permissions=('add','change','delete','view')
permissions:除了 Django 默认给 Model 添加的三个权限之外,还可以通过 permisssions 给 Model 添加额外的权限。不过 permissions 是一个包含二元组的元组或者列表,所以使用时应该注意格式,即 permissions=[(权限代码,权限名称)],示例如下所示:
-
-
permissions = [(have_read_permission', '有读的权限')]
-
- unique_together:这个选项用于下面情形:当你需要通过两个字段保持唯一性时使用。比如用户的姓名(name)和 身份证号码(ID number)两者的组合必须是唯一的,那么需要这样设置:
-
unique_together = (("first_name", "last_name"),)
一个 ManyToManyField 不能包含在 unique_together 中。如果你需要验证 ManyToManyField 字段的唯一验证,尝试使用 through 属性进行关联。
-
- proxy:默认值为为 False, 如果设置成 Ture,则表示为基类、父类的代理模型。
- db_tablespace:表空间,用于优化数据库性能,常用于 Oracle、PostgerSQL 数据库。MySQL 数据库不支持表空间,所以当数据存储后端数据库不支持的时候,Django 会在自动忽略这个元数据选项。
- get_latest_by:指定一个 DateField 或者 DateTimeField 字段的名字,即 model 的属性名字。使用示例如下:
-
get_latest_by = "order_date"
-
- order_with_respect_to:这个选项一般用于多对多的关系中,它指向一个关联对象并将该对象进行排序,使用元数据项后你会得到一个 get_xxx_order() 和set_xxx_order() 的方法,通过它们你可以设置或者得到排序的对象。
标签:name,ordering,Django,Meta,Model,详解,permissions From: https://www.cnblogs.com/fyyp/p/17149077.html