7

我正在从官方 django 教程中学习 django。当我从表单中投票时,我收到了这个错误。这可能是由 views.py 下的投票功能引起的

这是我的views.py/投票功能:

def vote(request,poll_id):
    p=get_object_or_404(Poll, pk=poll_id)
    try:
            selected_choice = p.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
            return render_to_response('polls/detail.html', {'poll':p,
                                                            'error_message' : "didint select anything ",}, context_instance= RequestContext(request))

    else:
            selected_choice.votes += 1
            selected_choice.save()
            return HttpResponseRedirect(reverse('polls.views.results', args=(p.id,)))

这是错误消息屏幕:

**ValueError 在 /polls/2/vote/

以 10 为底的 int() 的无效文字:'on'**

请求方式:POST 请求网址:127.0.0.1:8000/polls/2/vote/

Django 版本:1.4 异常类型:ValueError 异常值:int() 的无效文字,基数为 10:'on' 异常位置:/usr/local/lib/python2.7/dist-packages/django/db/models/fields/ get_prep_value 中的init .py,第 537 行

这是我的 polls/urls.py :

from django.conf.urls import patterns, include, url

urlpatterns = patterns('polls.views',

    url(r'^$', 'index'),
    url(r'^(?P<poll_id>\d+)/$','detail'),
    url(r'^(?P<poll_id>\d+)/results/$','results'),
    url(r'^(?P<poll_id>\d+)/vote/$','vote'),

)

这是 project/urls.py :

from django.conf.urls import patterns, include, url

urlpatterns = patterns('polls.views',

    url(r'^$', 'index'),
    url(r'^(?P<poll_id>\d+)/$','detail'),
    url(r'^(?P<poll_id>\d+)/results/$','results'),
    url(r'^(?P<poll_id>\d+)/vote/$','vote'),

)

4

5 回答 5

8

当您尝试将字符串转换为整数时会收到此错误,但该字符串实际上不包含任何数字:

IE

number = int(string)

从您的代码中,我在三个地方看到了整数的使用和可能的转换。当p=get_object_or_404(Poll, pk=poll_id)我们假设您已正确地将整数作为 poll_id 传递时。您能否发布与此视图相关联的 urlpattern 和示例 URL?

您还做出了一个假设,该假设request.POST['choice']将是一个整数并且可以这样转换。您没有捕获与此相关的异常,因此您需要检查此条目的值是什么。我会为此部分添加一些其他检查:

if request.method=="POST":
    choice = request.POST.get('choice', None)
    if choice is not None:
        selected_choice = p.choice_set.get(pk=choice)
...

这两个最突出。

请发布您的 urlpattern 和更多您收到的错误消息(例如哪个特定行引发了您的异常)。

于 2012-07-08T23:19:10.997 回答
4

是的,我遇到了同样的错误,@cianof 解释的问题出在模板 polls/detail.html 和其他模板中。当您粘贴教程中的代码并且您的编辑器中有 80 个字符的边距时,会发生错误。

<input type="radio" name="choice" id="choice {{ forloop.counter }}" value="{{
choice.id }}" />

这不起作用,因为choice.id 靠近大括号{{choice.id }},您应该始终在以下之间留一个空格:{{ choice.id }}

关于@garromark 发布的选角答案,我不能说什么,我是 Python 和 Django 编码的新手。

于 2014-10-01T13:30:53.087 回答
2

我也有这个错误。

我的情况是我的表单模板中有错字。仔细检查投票详细信息模板(“polls/detail.html”)是否有错别字。

于 2014-04-17T23:24:49.207 回答
1

我发生了同样的错误。我发现出了什么问题,原来只是一些小细节: 首先,在我的“polls/detail.html”模板中,有一个输入:

<input type="radio" name="choice" id="choice {{forloop.counter}}" value="{{choice.id}}"/>{{choice_id}}以前有这就是为什么它没有得到价值。

其次,另一个错误说我的'polls/result.html'没有找到,然后我进入这个模板我发现了一个愚蠢的错误:

<a href="{% url 'polls:detail' question.id %}">Vote again?</a>

在标签里面,我有'polls.detail',难怪找不到模板。;)

于 2018-10-17T08:53:17.950 回答
0

我收到了类似的错误。问题隐藏在这里:

def results(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/results.html', {'question: question'})
于 2016-07-31T10:29:24.590 回答