literal no válido para int () con base 10: ‘en’ Python-Django

Estoy aprendiendo django del tutorial oficial de django. y estoy recibiendo este error cuando vota algo de forma. esto fue causado por – probablemente – función de voto bajo views.py

Aquí está mi función de views.py / vote:

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,))) 

y esta es la pantalla de mensaje de error:

** ValueError at / polls / 2 / vote /

literal no válido para int () con base 10: ‘on’ **

Método de solicitud: POST URL de solicitud: 127.0.0.1:8000/polls/2/vote/

Versión de Django: 1.4 Tipo de excepción: Valor de excepción de ValueError: literal no válido para int () con base 10: Ubicación de excepción “/usr/local/lib/python2.7/dist-packages/django/db/models/fields/ init .py en get_prep_value, línea 537

y aquí están mis encuestas / urls.py:

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

urlpatterns = patrones (‘polls.views’,

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

)

y aquí está el proyecto / urls.py:

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

urlpatterns = patrones (‘polls.views’,

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

)

Recibirá este error cuando intente convertir una cadena en un entero, pero la cadena no contiene ningún dígito:

es decir

 number = int(string) 

Desde su código, hay tres lugares donde veo el uso y la conversión probable de un entero. Cuando p=get_object_or_404(Poll, pk=poll_id) estamos asumiendo que ha pasado correctamente un entero como poll_id. ¿Podría publicar el urlpattern que está usando asociado con esta vista y una URL de ejemplo?

También está suponiendo que request.POST['choice'] será un número entero y se puede convertir como tal. No está detectando una excepción relacionada con esto, por lo que querrá verificar cuál es el valor de esta entrada. Me gustaría añadir en algunos otros controles para esta parte:

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

Estos dos son los que más se destacan.

Publique su patrón de URL y más del mensaje de error que estaba recibiendo (por ejemplo, qué línea específica está lanzando su excepción).

Yo también tuve este error.

Mi caso es que tuve un error tipográfico en mi plantilla de formulario. Verifique la plantilla de detalles de la encuesta (“polls / detail.html”) para ver si hay errores tipográficos.

Sí, tuve el mismo error, el problema que se explica en @cianof estaba en la plantilla polls / detail.html y en otras plantillas. El error se produce cuando pega el código del tutorial y tiene 80 caracteres de margen en su editor.

  

Esto no funcionará porque choice.id está cerca de las llaves {{choice.id }} , siempre debe dejar un espacio entre: {{ choice.id }}

Acerca de la respuesta al casting publicada por @garromark, no puedo decir nada, soy nueva en Python y Django cooding.

Recibí un error similar. El problema estaba oculto aquí:

 def results(request, question_id): question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/results.html', {'question: question'}) 

Tuve el mismo error que ocurrió. Descubrí lo que estaba mal, resultó que solo fueron algunos pequeños detalles: Primero, en mi plantilla ‘polls / detail.html’, hay una entrada:

Tenía {{choice_id}} antes por eso no lo hizo t obtener el valor.

Segundo, otro error dijo que no se encontró ‘polls / result.html’, luego entré en esta plantilla y encontré un error estúpido:

Vote again?

Dentro de la etiqueta, tenía ‘polls.detail’, no es de extrañar por qué no se encontró la plantilla. 😉