Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用django消息框架显示用户是否已经投票_Python_Django - Fatal编程技术网

Python 使用django消息框架显示用户是否已经投票

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

我需要检查和显示django消息框架,如果用户已经投票,然后显示在结果页面,你们已经投票,但若他并没有,那个么显示你们的投票已经保存。所以我添加了success消息,但我不知道如何检查用户是否投票

我的模特

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>