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