unique_together
这个元数据是非常重要的一个!它等同于数据库的联合约束!
举个例子,假设有一张用户表,保存有用户的姓名、出生日期、性别和籍贯等等信息。要求是所有的用户唯一不重复,可现在有好几个叫“xxx”的,如何区别它们呢?
我们可以设置不能有两个用户在同一个地方同一时刻出生并且都叫“xxx”,使用这种联合约束,保证数据库不能重复添加用户。
使用unique_together,也就是联合唯一!
class Person(models.Model):
name =..............
birth_day= ..............
address=.............
class Meta:
unique_together = [['name', 'birth_day', 'address'],]
这样,哪怕有两个在同一天出生的user,但他们的籍贯不同,也就是两个不同的用户。一旦三者都相同,则会被Django拒绝创建。这一元数据经常被用在admin后台,并且强制应用于数据库层面。
unique_together接收一个[[xxx,xxx......],[],[].....],每一个元素都是一个列表(元组也可以),表示一组联合唯一约束,可以同时设置多组约束。为了方便,对于只有一组约束的情况下,可以简单地使用一维元素,例如:
unique_together = ['name', 'birth_day', 'address']
联合唯一无法作用于普通的多对多字段。
参考连接
Django4.0新特性里的唯一性约束有更改,
函数类唯一性约束
UniqueConstraint() 新增了一个*expressions位置参数,可用于创建唯一性约束,在表达式上或数据库函数上。例如:
from django.db import models
from django.db.models import UniqueConstraint
from django.db.models.functions import Lower
class MyModel(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
class Meta:
constraints = [
UniqueConstraint(
Lower('first_name'),
Lower('last_name').desc(),
name='first_last_name_unique',
),
]
使用模型的Meta.constraints选项将功能唯一性约束添加到模型中 。
参考连接