Python: не может конкатенировать объекты 'str' и 'long'
Я пытаюсь настроить поле выбора в django, но я не думаю, что это проблема django. Поле выбора принимает итерируемый (например, список или кортеж) 2-х кортежей для использования в качестве вариантов для этого поля.
Здесь мой код:
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")])
по какой-то причине я всегда получаю следующую ошибку:
TypeError - cannot concatenate 'str' and 'long' objects
Последняя строка всегда выделена.
Я не пытаюсь что-то конкатенировать. Почти независимо от того, что я меняю список на параметр "choice", я получаю эту ошибку.
Что происходит?
Ответы
Ответ 1
Скорее всего, он выделяет последнюю строку только потому, что вы разделили оператор на несколько строк.
Исправление фактической проблемы, скорее всего, изменится
self.fields['question_' + question.id]
к
self.fields['question_' + str(question.id)]
Как вы можете быстро протестировать в интерпретаторе Python, добавление строки и числа вместе не работает:
>>> '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'
Ответ 2
'question_'
- строка, question.id
длинная. Вы не можете объединить две вещи разных типов, вам нужно будет преобразовать long в строку с помощью str(question.id)
.
Ответ 3
Вероятно, question.id
- целое число. Попробуйте
self.fields['question_' + str(question.id)] = ...
вместо.
Ответ 4
self.fields['question_' + question.id]
Это похоже на проблему. Попробуйте
"question_%f"%question.id
или
"question_"+ str(question.id)
Ответ 5
Это проблема с выполнением слишком многих вещей в одной строке - сообщения об ошибках становятся немного менее полезными. Если бы вы написали это как ниже, проблема была бы намного легче найти
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")])