可以使用unique_together()在django中创建具有相同first_person和second_person的重复线程。
class Meta:
unique_together = ['first_person', 'second_person']
但就像那样,是否有可能使它对相同的second_person和first_person也起作用?
例如,如果first_person是abc@gmail.com和second_person是xyz@gmail.com那么我不能创建重复的值,但如果我试图使second_person是abc@gmail.com和first_person是xyz@gmail.com那么它再次创建线程与同一个人,我不想要的。请让我知道如何解决这个问题。
从django-4.1开始,你可以用 UniqueConstraint
来使用函数式唯一性过滤器(和索引)[Django-doc],这样你就可以确定较低和较大的项:
from django.db import models
from django.db.models.functions import Greatest, Least
# …
class MyModel(models.Model):
# …
class Meta:
constraints = [
UniqueConstraint(
Least('first_person', 'second_person'),
Greatest('first_person', 'second_person'),
name='asymetrical_friends',
)
]
注意:如
unique_together
文档[Django-doc]表示,unique_together
约束可能会被弃用。文档建议使用UniqueConstraint
[Django-doc]来自Django的约束框架 .