Джанго уникальная комбинация вместе - PullRequest
0 голосов
/ 11 января 2019

Мой сценарий таков:

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

Есть ли какой-то класс мета, который мне не хватает? Или есть другой способ обеспечить это? (Я знаю, что могу переопределить класс сохранения, но я спрашиваю, есть ли способ сделать это без этого).

...