2010-08-20 18 views
11

Estoy tratando de configurar un campo de elección en django, pero no creo que esto sea un problema de django. El campo de opciones toma un iterable (por ejemplo, una lista o tupla) de 2 tuplas para usar como opciones para este campo.python: no se puede concatenar objetos 'str' y 'long'

Aquí está mi código:

self.fields['question_' + question.id] = forms.ChoiceField(
       label=question.label, 
       help_text=question.description, 
       required=question.answer_set.required, 
       choices=[("fe", "a feat"), ("faaa", "sfwerwer")]) 

por alguna razón, siempre me sale el siguiente error:

TypeError - cannot concatenate 'str' and 'long' objects 

La última línea siempre está resaltado.

No estoy tratando de concatenar nada. Casi sin importar a qué cambio la lista para el parámetro 'opciones', obtengo este error.

¿Qué está pasando?

+0

Tenga en cuenta que "la última línea se resalta" porque está apuntando a toda la declaración de varias líneas en las que se encuentra el error. –

+0

muchas gracias a todos. eso lo resolvió – Roger

Respuesta

28

Lo más probable es que esté resaltando la última línea solo porque divide la instrucción en varias líneas.

La corrección para el real problema lo más probable es estar cambiando

self.fields['question_' + question.id] 

a

self.fields['question_' + str(question.id)] 

Como se puede probar rápidamente en un intérprete de Python, la adición de una cadena y un número junto doesn no funciona:

>>> 'hi' + 6 

Traceback (most recent call last): 
    File "<pyshell#0>", line 1, in <module> 
    'hi' + 6 
TypeError: cannot concatenate 'str' and 'int' objects 
>>> 'hi' + str(6) 
'hi6' 
1

Probablemente question.id es un número entero. Pruebe

self.fields['question_' + str(question.id)] = ... 

en su lugar.

5

'question_' es una cadena, question.id es un largo. No puede concatenar dos cosas de diferentes tipos, tendrá que convertir el largo en una cadena usando str(question.id).

0
self.fields['question_' + question.id] 

Parece el problema. Trate

"question_%f"%question.id 

o

"question_"+ str(question.id) 
-2

Este es un problema de hacer demasiadas cosas en una sola línea - los mensajes de error se convierten en poco menos útiles. hubiera escrito como abajo el problema sería mucho más fácil encontrar

question_id = 'question_' + question.id 
self.fields[question_id] = forms.ChoiceField(
       label=question.label, 
       help_text=question.description, 
       required=question.answer_set.required, 
       choices=[("fe", "a feat"), ("faaa", "sfwerwer")]) 
Cuestiones relacionadas