Django - создать уникальное ограничение базы данных для двух или более полей вместе

Предположим, я хочу ежедневно записывать опросы пользователей. В этом случае у меня есть таблица с именем vote, которая имеет столбцы poll, choice и user-id. Итак, как я могу устранить ограничение (возможно, в моделях django или где это возможно), что poll и user-id оба не должны быть одинаковыми для любой записи, но, подобно тому, как один и тот же пользователь может голосовать за различные опросы один раз и, очевидно, различные пользователи может голосовать за тот же опрос. Надеюсь, я поняла.

Ответы

Ответ 1

unique_together может быть тем, что вы ищете.

Ответ 2

Атрибут unique_together класса Meta вашей модели - это то, что вы ищете:

class Meta:
    unique_together = ('poll', 'user_id')

Для получения дополнительной информации просмотрите django docs.

Ответ 4

Django 2.2 представил UniqueConstraint и примечание в официальной документации по этой теме говорит о том, что unique_together может быть unique_together устаревшим в будущем.

Вы можете добавить UniqueConstraint к опции Meta.constraints вашего модельного класса следующим образом:

class Meta:
    constraints = [
        models.UniqueConstraint(fields=['poll', 'user_id'], name="user-polled")
        ]