2012-12-26 4 views
2

J'essaie de créer un système de retriction simple pour que les utilisateurs ne puissent pas voter deux fois sur un simple sondage (principalement comme l'exemple du sondage dans le tutoriel django). Je n'arrive pas à trouver une approche que je comme.Comment mettre en place un système de validation de vote?

Celui que j'aime le plus est d'avoir un utilisateur FK dans le modèle Choix et ajouter les utilisateurs là, comme ceci:

models.py

vote = models.ForeignKey(User) 

views.py

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

De cette façon, je peux limiter les votes à 1 par choix, mais je voulais limiter à 1 par sondage. Imaginez la situation: vous avez un sondage qui a 5 choix, avec cette validation, l'utilisateur peut seulement voter 1 fois, mais 1 fois par choix, ce qui signifie qu'il/elle peut voter 5 fois.

Que recommanderiez-vous pour faire un système qui n'autorise qu'un seul vote par sondage? Je vous ai besoin des modèles ou quelque chose que je vais les coller, c'est un projet opensource.

+0

avez-vous pensé à utiliser une table d'intermédiaire? regarder dans les tables 'through' dans django - Vous pouvez ajouter des restrictions dans la table de passage. – karthikr

+0

J'ai lu la docuemntation sur la table «through» mais je ne vois pas comment cela peut m'aider. Je n'ai que deux modèles de données. J'aurais besoin de trois pour ça. –

Répondre

2

Dans votre modèle de sondage, ajoutez un champ ManyToManyField à l'utilisateur, représentant les utilisateurs ayant voté pour les sondages. Pour chaque sondage que vous voulez afficher, vérifiez si ce sondage figure dans la liste des sondages de l'utilisateur actuel. Si c'est le cas, ne leur permettez pas de voter.

Et lorsque l'utilisateur actuel vote dans un sondage, ajoutez ce sondage à la liste des sondages de l'utilisateur actuel.

Questions connexes