运维咖啡吧

享受技术带来的乐趣,体验生活给予的感动

Django Model Meta选项

Model内部Class Meta选项汇总

abstract

当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

db_table

定义数据库中表的名字,默认为app lale

indexes

主键

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

联合索引

index_together = ["pub_date", "deadline"]

以上表示pub_date和deadline会创建联合索引

unique_together

联合唯一

unique_together = ('parent', 'name',)

以上表示parent和name两个字段联合唯一,也就是说数据库表里不会出现两条parent和name都相同的数据

ordering

对象的默认排序,用于获取对象列表时

ordering = ['-pub_date', 'author']

以上表示先按照pub_date降序,然后按照author升序

permissions

创建此对象时要输入权限表的额外权限

permissions = (
    ("relation_select", "业务关系查看权限"),
    ("relation_change", "业务关系修改权限"),
)

default_permissions

默认值为('add', 'change', 'delete', 'view') 。如果我们不需要任何默认的权限,可以将其设置为空列表

default_permissions = ()

app_label

如果在INSTALLED_APPS中定义了一个应用程序之外的模型,它必须声明属于哪个应用程序

app_label = 'myapp'

verbose_name

对象的可读名称,单数

verbose_name_plural

对象的可读名称,复数

base_manager_name

管理器的属性名,例如默认的objects

db_tablespace

此模型要使用的 数据库表空间 名称。如果有设置的话,默认是项目的 DEFAULT_TABLESPACE 配置。如果后端不支持表空间,则忽略此选项

default_manager_name

模型的 默认管理器的名称

从相关对象到这个对象的关系默认使用的名称。默认为 _set

get_latest_by

模型中的字段名或字段名列表,通常是DateField,DateTimeField或IntegerField

managed

默认为True,表示由Django来管理数据库表的生命周期。如果False,将不对该模型进行数据库表的创建、修改或删除操作

如果该模型代表一个现有的表或一个通过其他方式创建的数据库视图,这一点很有用。这是在managed=False时唯一的区别。模型处理的所有其他方面都与正常情况完全相同

order_with_respect_to

使该对象可以根据给定字段(通常是ForeignKey)进行排序

proxy

如果为True,作为另一个模型子类的模型将被视为代理模型

required_db_features

当前连接应具备的数据库特征列表,以便在迁移阶段考虑模型。例如,如果你将此列表设置为 ['gis_enabled'],则模型将只在支持 GIS 的数据库上同步

required_db_vendor

本模型所特有的支持的数据库厂商名称。目前的内置厂商名称是: sqlitepostgresqlmysqloracle。如果该属性不为空,且当前连接厂商与之不匹配,则该模型将不会同步

constraints

定义约束列表

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'),
        ]

label

只读,返回app_label.object_name

label_lower

只读,返回app_label.model_name