允许用户只投票一次。 Django的

时间:2013-09-18 18:56:45

标签: django

models.py中的内容:

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    is_active = models.BooleanField(default=True)
    # The rest of code...

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    # The rest of code...

class Voter(models.Model):
    user = models.ForeignKey(User)
    poll = models.ForeignKey(Poll)

我在vote的{​​{1}}视图中的内容:

views.py

但是这段代码有点奇怪。

我已经为测试目的创建了5个民意调查。 此代码仅适用于一个 只有在其中一次民意调查中,当我尝试投票两次时,我收到错误消息。 在本次调查的其余部分中,代码可以根据需要多次投票。

我不知道为什么。你有什么想法吗?

1 个答案:

答案 0 :(得分:7)

Voter ID不一定适合您的User ID。这就解释了为什么你看到它有时似乎有效(当选民ID和用户ID意外匹配时)。替换:

voters = [user.id for user in Voter.objects.filter(poll__id=poll_id)]
if request.user.id in voters:

if Voter.objects.filter(poll_id=poll_id, user_id=request.user.id).exists()

最好让数据库后端为您执行检查。