Python 使用django消息框架显示用户是否已经投票
我需要检查和显示django消息框架,如果用户已经投票,然后显示在结果页面,你们已经投票,但若他并没有,那个么显示你们的投票已经保存。所以我添加了success消息,但我不知道如何检查用户是否投票 我的模特Python 使用django消息框架显示用户是否已经投票,python,django,Python,Django,我需要检查和显示django消息框架,如果用户已经投票,然后显示在结果页面,你们已经投票,但若他并没有,那个么显示你们的投票已经保存。所以我添加了success消息,但我不知道如何检查用户是否投票 我的模特 class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') def __uncidoe
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __uncidoe__(self):
return self.question
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __unicode__(self):
return self.choice_text
我的观点
def results(request, poll_id):
poll = get_object_or_404(Poll, pk=poll_id)
messages.add_message(request, messages.SUCCESS, 'Your vote has been saved !!!')
return render(request, 'polls/results.html', {'poll': poll})
my results.html
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{message.tags}}" {% endif %}>{{message}}</li>
{% endfor %}
</ul>
{%endif%}
添加新模型以存储每个用户的投票。虚拟解决方案:
class UserVote(models.Model):
pool = models.ForeignKey(Pool)
user = models.ForeignKey(User)
choice = models.ForeignKey(Choice)
class Meta:
unique_together = ('pool', 'user')
和视图处理用户选择提交:
def send_result(request, poll_id, choice_id):
poll = get_object_or_404(Poll, pk=poll_id)
vote, created = UserVote.objects.get_or_create(pool=pool, user=request.user, defaults={'choice': choice_id})
if created:
messages.add_message(request, messages.SUCCESS, 'Your vote has been saved !!!')
else:
messages.add_message(request, messages.ERROR, 'Your already voted before !!!')
return redirect(reverse('results', pool=pool_id))
显示投票表格的视图:
def vote_form(request, pool_id):
poll = get_object_or_404(Poll, pk=poll_id)
choices = Choice.objects.filter(pool=pool)
return render(request, 'vote_form.html', {'choices': choices, 'pool': pool})
及其模板:
<form action="{% url 'send_result' pool_id=pool.id %}">
{% for choice in choices %}
<input type="radio" name="choice_id" value="{{ choice.id }}"> {{ choice.choice_text }}<br />
<input type="submit" value="vote">
{% endfor %}
</form>
我得到了一个错误,它正好需要3个参数?嗯。。。您没有指定哪个函数或哪行引发此异常,因此我无法在视图中帮助您。py def函数,您给出了3个参数,但定义了2个参数,我想这与选项不一样-您必须将用户提交的选项传递给视图。我不知道你的表单和url.py看起来是什么样子,所以这取决于你从那里传递它。完成后,您可以使用此功能检查用户是否已经投票。好的,我添加了URL和投票定义,您能帮我解决这个问题吗?我对django有点陌生。
def vote_form(request, pool_id):
poll = get_object_or_404(Poll, pk=poll_id)
choices = Choice.objects.filter(pool=pool)
return render(request, 'vote_form.html', {'choices': choices, 'pool': pool})
<form action="{% url 'send_result' pool_id=pool.id %}">
{% for choice in choices %}
<input type="radio" name="choice_id" value="{{ choice.id }}"> {{ choice.choice_text }}<br />
<input type="submit" value="vote">
{% endfor %}
</form>