Moh*_*ari 5 python django django-models
我只想为同一用户创建一个对象。
class MyModel(models.Model):
user1 = models.ForeignKey(settings.AUTH_USER_MODEL,...)
user2 = models.ForeignKey(settings.AUTH_USER_MODEL,...)
class Meta:
constraints = [
UniqueConstraint(
fields=['user1', 'user2'],
name='user_unique',
),
# UniqueConstraint(
# fields=['user2', 'user1'],
# name='user_unique2',
# ),
]
Run Code Online (Sandbox Code Playgroud)
我可以用另一种方式解决这个问题,我只是想知道如何用UniqueConstraint.
添加另一个 UniqueConstraint 并移动字段并不能解决问题。
例如,对于用户 X 和 Y,我只需要一个对象。
由于 Django 4.0 约束现在支持表达式,这允许我们在约束中使用数据库函数,从而允许我们使用排序字段创建唯一约束:
from django.db.models.functions import Least, Greatest
class MyModel(models.Model):
user1 = models.ForeignKey(settings.AUTH_USER_MODEL,...)
user2 = models.ForeignKey(settings.AUTH_USER_MODEL,...)
class Meta:
constraints = [
UniqueConstraint(
Least("user1", "user2"), Greatest("user1", "user2"),
name='user_unique',
)
]
Run Code Online (Sandbox Code Playgroud)