Model内部Class Meta选项汇总
当abstract = true时,表示这个模型是一个抽象基类,抽象基类只能供其他model类引用,并不会实际创建表,例如
class TimeBaseModel(models.Model):
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
class Meta:
abstract = True
class Project(TimeBaseModel):
english_name = models.CharField(max_length=16, unique=True, verbose_name='英文名称')
chinese_name = models.CharField(max_length=32, unique=True, verbose_name='中文名称')
def __str__(self):
return self.english_name
定义数据库中表的名字,默认为app lale
主键
from django.db import models
class Customer(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
class Meta:
indexes = [
models.Index(fields=['last_name', 'first_name']),
models.Index(fields=['first_name'], name='first_name_idx'),
]
联合索引
index_together = ["pub_date", "deadline"]
以上表示pub_date和deadline会创建联合索引
联合唯一
unique_together = ('parent', 'name',)
以上表示parent和name两个字段联合唯一,也就是说数据库表里不会出现两条parent和name都相同的数据
对象的默认排序,用于获取对象列表时
ordering = ['-pub_date', 'author']
以上表示先按照pub_date
降序,然后按照author
升序
创建此对象时要输入权限表的额外权限
permissions = (
("relation_select", "业务关系查看权限"),
("relation_change", "业务关系修改权限"),
)
默认值为('add', 'change', 'delete', 'view') 。如果我们不需要任何默认的权限,可以将其设置为空列表
default_permissions = ()
如果在INSTALLED_APPS
中定义了一个应用程序之外的模型,它必须声明属于哪个应用程序
app_label = 'myapp'
对象的可读名称,单数
对象的可读名称,复数
管理器的属性名,例如默认的objects
此模型要使用的 数据库表空间 名称。如果有设置的话,默认是项目的 DEFAULT_TABLESPACE 配置。如果后端不支持表空间,则忽略此选项
模型的 默认管理器的名称
从相关对象到这个对象的关系默认使用的名称。默认为 _set
模型中的字段名或字段名列表,通常是DateField,DateTimeField或IntegerField
默认为True,表示由Django来管理数据库表的生命周期。如果False,将不对该模型进行数据库表的创建、修改或删除操作
如果该模型代表一个现有的表或一个通过其他方式创建的数据库视图,这一点很有用。这是在managed=False
时唯一的区别。模型处理的所有其他方面都与正常情况完全相同
使该对象可以根据给定字段(通常是ForeignKey)进行排序
如果为True,作为另一个模型子类的模型将被视为代理模型
当前连接应具备的数据库特征列表,以便在迁移阶段考虑模型。例如,如果你将此列表设置为 ['gis_enabled'],则模型将只在支持 GIS 的数据库上同步
本模型所特有的支持的数据库厂商名称。目前的内置厂商名称是: sqlite
、postgresql
、mysql
和oracle
。如果该属性不为空,且当前连接厂商与之不匹配,则该模型将不会同步
定义约束列表
from django.db import models
class Customer(models.Model):
age = models.IntegerField()
class Meta:
constraints = [
models.CheckConstraint(check=models.Q(age__gte=18), name='age_gte_18'),
]
只读,返回app_label.object_name
只读,返回app_label.model_name