Уникальное ограничение для двух FK на одну модель без заказа - PullRequest
0 голосов
/ 28 января 2019

Как я могу сделать unique_together для модели:

class Team(models.Model:
    user_a = models.ForeignKey(User, related_name='a')
    user_b = models.ForeignKey(User, related_name='b')

И я хочу убедиться, что user_a и user_b не могут быть дубликатами, независимо от того, какой порядокони есть.Так что user_a=1, user_b=2 будет также ограничивать user_a=2, user_b=1 вместо точного дубликата.

Есть ли способ сделать это без специальной логики для проверки сохранения команды?В настоящее время я просто позволяю им дублировать, а затем удаляю дубликаты полей с помощью запроса RawSQL.

1 Ответ

0 голосов
/ 28 января 2019

Я проверил, и вы можете использовать атрибут unique_together класса Meta в вашей модели с внешними ключами.Попробуйте что-то вроде:

class Team(models.Model:
    class Meta:
        unique_together = (("user_a", "user_b"))
    user_a = models.ForeignKey(User, related_name='a')
    user_b = models.ForeignKey(User, related_name='b')

Если это не соответствует вашим потребностям, вы можете переопределить метод save или validate_unique модели.Смотрите соответствующий документ здесь .Но вам нужно будет добавить свою собственную логику.

...