Мой сценарий таков:
class Partnership(models.Model):
partner_a = models.ForeignKey(
"Person",
on_delete=models.CASCADE,
related_name='%(class)s_partner_a',
)
partner_b = models.ForeignKey(
"Person",
on_delete=models.CASCADE,
related_name='%(class)s_partner_b',
)
class Meta:
unique_together = (partner_a, partner_b)
Это прекрасно работает при отказе от дублирования партнерства, если a = a и b = b:
Пример:
>>> a = Person('a')
>>> b = Person('b')
>>> Partnership.objects.create(person_a=a, person_b=b)
>>> Partnership.objects.create(person_a=a, person_b=b) # IntegretyError as expected
Тем не менее, он не правильно отказывается от следующего
>>> a = Person('a')
>>> b = Person('b')
>>> Partnership.objects.create(person_a=a, person_b=b)
>>> Partnership.objects.create(person_a=b, person_b=a) # Allowed
Есть ли какой-то класс мета, который мне не хватает? Или есть другой способ обеспечить это? (Я знаю, что могу переопределить класс сохранения, но я спрашиваю, есть ли способ сделать это без этого).