2010-08-20 18 views
11

Ich versuche, ein Auswahlfeld in Django einzurichten, aber ich denke nicht, dass dies ein Django-Problem ist. Das Auswahlfeld verwendet eine iterierbare (z. B. eine Liste oder ein Tupel) von 2-Tupeln, die als Auswahlmöglichkeiten für dieses Feld verwendet werden.Python: kann 'str' und 'lange' Objekte nicht verketten

Hier ist mein Code:

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")]) 

aus irgendeinem Grund habe ich immer die folgende Fehlermeldung erhalten:

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

Die letzte Zeile immer hervorgehoben.

Ich versuche nicht, etwas zu verketten. Fast unabhängig davon, was ich für den 'Auswahl' Parameter auf die Liste ändere, bekomme ich diesen Fehler.

Was ist los?

+0

Beachten Sie, dass "die letzte Zeile markiert ist", weil es auf die gesamte mehrzeilige Anweisung zeigt, in der der Fehler liegt. –

+0

Vielen Dank an alle. das hat es gelöst. – Roger

Antwort

28

Höchstwahrscheinlich markiert es die letzte Zeile nur, weil Sie die Anweisung auf mehrere Zeilen aufteilen.

Das Update für das tatsächliche Problem wird höchstwahrscheinlich

Ändern werden
self.fields['question_' + question.id] 

zu

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

Wie Sie in einem Python-Interpreter schnell testen, einen String und eine Reihe Addition doesn t arbeiten:

>>> '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

Wahrscheinlich question.id ist eine ganze Zahl. Versuchen Sie

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

stattdessen.

5

'question_' ist eine Zeichenfolge, question.id ist eine lange. Sie können zwei Dinge unterschiedlicher Typen nicht miteinander verketten. Sie müssen die Länge in eine Zeichenfolge konvertieren, indem Sie str(question.id) verwenden.

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

Das sieht wie das Problem aus. Versuchen

"question_%f"%question.id 

oder

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

Dies ist ein Problem mit dem Tun zu viele Dinge in einer Linie - die Fehlermeldungen leicht werden weniger hilfreich. Hätten Sie es geschrieben als unten wäre das Problem viel einfacher zu finden

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")]) 
Verwandte Themen