Как внедрить систему проверки голосов?

Я пытаюсь создать простую систему ретракции, чтобы пользователи не могли голосовать дважды в простом опросе (в основном, как пример опроса в учебнике по django). Мне кажется, что я не могу найти подход, который мне нравится.

Больше всего мне нравится иметь пользовательский FK в модели выбора и добавлять туда пользователей, например так:

models.py

vote = models.ForeignKey(User)

views.py

def vote(request):
    # Some validations and stuff...
    vote.add(request.user)

Таким образом, я могу ограничить количество голосов до 1 за выбор, но я хотел ограничить его до 1 за опрос. Представьте себе ситуацию: у вас есть опрос, который имеет 5 вариантов, с этой проверкой пользователь может голосовать только 1 раз, но 1 раз за выбор, что означает, что он / она может голосовать 5 раз.

Что бы вы порекомендовали для создания системы, которая позволила бы получить только 1 голос за опрос? Если вам нужны модели или я их вставлю, это проект с открытым исходным кодом.

1 ответ

Решение

В вашей модели опроса добавьте ManyToManyField в User, представляющий, какие пользователи проголосовали за какие опросы. Для каждого опроса, который вы хотите отобразить, проверьте, входит ли этот опрос в список опросов текущего пользователя. Если это так, не позволяйте им голосовать.

А когда текущий пользователь проголосует в опросе, добавьте этот опрос в список опросов текущего пользователя.

Другие вопросы по тегам