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, то снова создается поток с одним и тем же человеком, что мне не нужно. Пожалуйста, дайте мне знать, как это исправить.
Начиная с django-4.1, вы можете использовать функциональные 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, theunique_together
constraint will likely become deprecated. The documentation advises to use theUniqueConstraint
[Django-doc] from Django's constraint framework.