在模型类里面可以进行元选项设置.
模型元数据是“任何不是字段的数据”
元选项举例:
from django.db import models
class Ox(models.Model):
horn_length = models.IntegerField()
class Meta:
ordering = ["horn_length"]
verbose_name_plural = "oxen"
可用的元选项
abstract
如果 abstract = True, 就表示模型是 抽象基类
app_label
如果一个模型位于标准的位置之外(应用的models.py 或models 包),该模型必须定义它属于哪个应用
即:如果你在app应用外定义了模型,你必须要使用app_label
来告诉django它属于哪个app应用
app_label = 'myapp'
db_table
该模型所用的数据表的名称:
db_table = 'music_album'
ordering
对象默认的顺序,获取一个对象的列表时会按照这个字段排序:
它是一个字符串的列表或元组。每个字符串是一个字段名,前面带有可选的“-”前缀表示倒序。前面没有“-”的字段表示正序。使用"?"来表示随机排序。
例如:按照pub_date字段的倒序排序,这样写:
ordering = ['-pub_date']
要按照pub_date字段的正序排序,这样写:
ordering = ['pub_date']
注意:
排序并不是没有任何代价的操作。你向ordering属性添加的每个字段都会产生你数据库的开销。你添加的每个外键也会隐式包含它的默认顺序。
unique_together
联合唯一索引
这个元数据是非常重要的一个!它等同于数据库的联合约束!
举个例子,假设有一张用户表,保存有用户的姓名、出生日期、性别和籍贯等等信息。要求是所有的用户唯一不重复,可现在有好几个叫“张伟”的,如何区别它们呢?(不要和我说主键唯一,这里讨论的不是这个问题)
我们可以设置不能有两个用户在同一个地方同一时刻出生并且都叫“张伟”,使用这种联合约束,保证数据库能不能重复添加用户(也不要和我谈小概率问题)。在Django的模型中,如何实现这种约束呢?
使用unique_together,也就是联合唯一!
比如:
unique_together = (('name', 'birth_day', 'address'),)
这样,哪怕有两个在同一天出生的张伟,但他们的籍贯不同,也就是两个不同的用户。一旦三者都相同,则会被Django拒绝创建。这一元数据经常被用在admin后台,并且强制应用于数据库层面。
unique_together接收一个二维的元组((xx,xx,xx,...),(),(),()...),每一个元素都是一个元组,表示一组联合唯一约束,可以同时设置多组约束。为了方便,对于只有一组约束的情况下,可以简单地使用一维元素,例如:
unique_together = ('name', 'birth_day', 'address')
联合唯一无法作用于普通的多对多字段。
index_together
联合索引,可以出现相同的数据
用来设置带有索引的字段组合:
index_together = [
["pub_date", "deadline"],
]
为了方便起见,当需要处理的字段的集合只有一个的时候(集合只有一个!),index_together可以只用一个中括号。也就是只用一个一维列表。
index_together = ["pub_date", "deadline"]
verbose_name
对象的一个易于理解的名称,为单数:
如果此项没有设置,Django会把类名拆分开来作为自述名,比如CamelCase 会变成camel case,
verbose_name = "pizza"
verbose_name_plural
该对象复数形式的名称:
如果此项没有设置,Django 会使用verbose_name
+ 's'。
# 一般都是和verbose_name一起使用
verbose_name = "pizza"
verbose_name_plural = verbose_name
网友评论