Django unique_together()用于field1和field2,反之亦然(field2和field1).



可以使用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的约束框架 .

相关内容

最新更新