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

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

Мне больше всего нравится наличие User FK в модели Choice и добавление туда пользователей, например:

модели.py

vote = models.ForeignKey(User)

просмотры.py

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

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

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


person Oscar Carballal    schedule 26.12.2012    source источник
comment
Вы рассматривали возможность использования промежуточной таблицы? просмотрите through таблицы в django. Вы можете добавить ограничения в сквозную таблицу.   -  person karthikr    schedule 26.12.2012
comment
Я читал документацию по таблице through, но не понимаю, как она может мне помочь. У меня есть только две модели данных. Мне для этого нужно три.   -  person Oscar Carballal    schedule 26.12.2012


Ответы (1)


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

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

person Elliott    schedule 26.12.2012