django - 我怎样才能让用户只投票一次
问题描述
所以我正在尝试使用 Django 构建一个投票应用程序,但我遇到了一个问题,我无法阻止用户投票两次或更多次
这是我的模型.py
class NewPoll(models.Model):
Question = models.CharField(max_length=255,default=False)
option1 = models.CharField(max_length=255)
option2 = models.CharField(max_length=255)
option3 = models.CharField(max_length=255)
option1count = models.IntegerField(default=0)
option2count = models.IntegerField(default=0)
option3count = models.IntegerField(default=0)
created_by= models.ForeignKey(User,related_name='newpoll',on_delete=models.CASCADE)
created_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.Question
我在views.py中的投票视图中的内容
#some codes
@login_required(login_url='signin')
def vote(request,poll_id):
newpoll = get_object_or_404(NewPoll,pk=poll_id)
if request.method == "POST":
selected_option = (request.POST['poll'])
if selected_option == 'option1':
newpoll.option1count +=1
elif selected_option == 'option2':
newpoll.option2count +=1
elif selected_option == 'option3':
newpoll.option3count +=1
else:
return HttpResponse("Wrong Form!")
newpoll.save()
return redirect('result',poll_id=newpoll.pk)
return render(request,'vote.html',{'newpoll':newpoll})
解决方案
您最好将投票、选项和投票拆分为单独的模型。然后您可以使用 meta 选项对投票模型进行唯一性检查unique_together
class NewPoll(models.Model):
Question = models.CharField(max_length=255,default=False)
created_by= models.ForeignKey(User,related_name='poll',on_delete=models.CASCADE)
created_date = models.DateTimeField(auto_now_add=True)
class PollOption(models.Model):
poll = models.ForeignKey(NewPoll, on_delete=models.CASCADE)
option = models.CharField(max_length=255)
class Vote(models.Model):
option = models.ForeignKey(PollOption, on_delete=models.CASCADE)
user = models.ForeignKey(User,on_delete=models.CASCADE)
class Meta:
unique_together = ['option', 'user']
推荐阅读
- python - 根据列值连接多个 CSV 文件,但多个 csv 文件具有相同的标题但顺序不同
- sass - 我试图用 scss 改变旋转木马的位置和大小,但它似乎什么也没做
- c# - 文本框保存最后输入的值
- selenium - 平台无关应用程序测试的推荐工具是什么?
- sql - 总和 - 年度明智 - 与分组
- amazon-web-services - EMR (AWS) 上的笔记本:无法启动内核
- vb.net - VB.Net串行通信超时后返回错误读数
- javascript - 将鼠标悬停在图像上时无法显示文本
- python - 如何在 Pandas 和 sklearn 中将预测值合并回原始 DataFrame
- html - 将动态模板注入弹出组件的问题