我实际上正在为学校项目编程一个问题网站。我从官方网站遵循了Django教程的第一步,但我现在正在尝试自己改进。
我在每个DIV中添加了一个"投票"按钮(在for循环中创建)我想在我的视图中增加。
。一些代码将更加解释。
所以这是我的详细信息。
{% 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 %}
这是我的观点。投票得出正确的问题,(应该)获得正确的选择的"投票"价值来增加:
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的真正初学者,所以请好好!
您的错误在行中:
<input type="submit" name="vote" id="" value="Vote">
因为您正在使用
selected_choice = question.choice_set.get(pk=request.POST['vote'])
request.POST['vote']
将因此返回"投票"。这是因为它获取定义为value="Vote"
的<input>
的值,但是您的视图语句需要一个整数值。
要解决您的问题,您需要通过value
字段中的选择ID,例如:
<input type="submit" name="vote" id="" value="{{ choice.id }}">
我建议您使用button
而不是input
为:
<button type="submit" name="vote" id="" value="{{ choice.id }}">Vote</button>