我实际上正在为一个学校项目编写一个提问网站。我遵循官方网站上 django 教程的第一步,但我现在正在尝试自己改进它。
我在每个 div(在 for 循环中创建)中添加了一个“投票”按钮,我想在我的 views.vote 中增加该按钮。
一些代码会更容易解释。
所以这里是我的 detail.html,它显示了我所有的问题以及对这个问题的选择/回答,每个选择都有一个投票按钮:
{% block content %}
<h2>{{ question.question_text }}</h2>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
<div class="choices">
<label for="">{{ choice.choice_text }}</label><br>
<p>{{ choice.votes }} vote{{ choice.votes|pluralize }}</p>
<input type="submit" name="vote" id="" value="Vote">
</div>
{% endfor %}
<br>
</form>
<a href="{% url 'polls:choice' question.id %}">Add a choice</a>
{% endblock %}
这是我的views.vote,它得到了正确的问题,并且(应该)获得了正确选择的“投票”值来增加:
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST['vote'])
except (KeyError, Choice.DoesNotExist):
return render(request, 'polls/detail.html', {
'question': question,
'error_message': "You didn't select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('polls:detail', args=(question.id,)))
我的“投票”值在我的“选择”对象中声明,如下所示:
class Choice(models.Model):
votes = models.IntegerField(default=0)
实际上,当我按下“投票”按钮时,我收到以下错误消息:
invalid literal for int() with base 10: 'Vote'
我是 django 的真正初学者,所以请善待!