Django unique_together() для field1 и field2 и наоборот (field2 и field1)

Возможно создать дубликат потока с одинаковыми первым_персонажем и вторым_персонажем, используя unique_together() в django.

class Meta:
        unique_together = ['first_person', 'second_person']

Но только так, Можно ли сделать так, чтобы это работало и для второго_персонажа и для первого_персонажа?

Например, если первый_человек - abc@gmail.com, а второй_человек - xyz@gmail.com, то я не могу создать дублирующее значение, но если я пытаюсь сделать второй_человек - abc@gmail.com, а первый_человек - xyz@gmail.com, то снова создается поток с одним и тем же человеком, что мне не нужно. Пожалуйста, дайте мне знать, как это исправить.

Начиная с , вы можете использовать функциональные uniqness фильтры (и индексы) с 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',
            )
        ]

Note: As the documentation on unique_together [Django-doc] says, the unique_together constraint will likely become deprecated. The documentation advises to use the UniqueConstraint [Django-doc] from Django's constraint framework.

Вернуться на верх