所以我正在尝试使用 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
中的 vote 视图中有什么#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})
答案 0 :(得分:0)
最好将投票、选项和投票拆分为单独的模型。然后您可以对投票模型 by using the meta option 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']