Я пытаюсь настроить поле выбора в 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

Последняя строка всегда подсвечивается.

Я не пытаюсь ничего объединять. Почти независимо от того, на что я изменяю список для параметра 'choices', я получаю эту ошибку.

В чем дело?

20
Roger 20 Авг 2010 в 20:31

5 ответов

Лучший ответ

Скорее всего, он выделяет последнюю строку только потому, что вы разделяете оператор на несколько строк.

Решение проблемы фактического , скорее всего, изменится

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'
34
Mark Rushakoff 20 Авг 2010 в 16:33

Вероятно, question.id является целым числом. Пытаться

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

Вместо.

2
kennytm 20 Авг 2010 в 16:32

'question_' - строка, question.id - длинная. Вы не можете объединить две вещи разных типов, вам придется конвертировать long в строку, используя str(question.id).

6
Sjoerd 20 Авг 2010 в 16:32

Это проблема с выполнением слишком большого количества вещей в одной строке - сообщения об ошибках становятся немного менее полезными. Если бы вы написали это, как показано ниже, проблему было бы намного легче найти

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")])
-2
John La Rooy 20 Авг 2010 в 16:36
self.fields['question_' + question.id]

Это похоже на проблему. Пытаться

"question_%f"%question.id

Или

"question_"+ str(question.id)
2
Umang 20 Авг 2010 в 16:35