Как внедрить систему проверки голосов?
Я пытаюсь создать простую систему ретракции, чтобы пользователи не могли голосовать дважды в простом опросе (в основном, как пример опроса в учебнике по 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, представляющий, какие пользователи проголосовали за какие опросы. Для каждого опроса, который вы хотите отобразить, проверьте, входит ли этот опрос в список опросов текущего пользователя. Если это так, не позволяйте им голосовать.
А когда текущий пользователь проголосует в опросе, добавьте этот опрос в список опросов текущего пользователя.