I\'m trying to set up a choice field in django, but I don\'t think this is a django issue. The choices field takes an iterable (e.g., a list or tuple) of 2-tuples to use as
This is a problem with doing too many things in one line - the error messages become slightly less helpful. Had you written it as below the problem would be much easier to find
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")])
'question_'
is a string, question.id
is a long. You can not concatenate two things of different types, you will have to convert the long to a string using str(question.id)
.
Probably question.id
is an integer. Try
self.fields['question_' + str(question.id)] = ...
instead.
self.fields['question_' + question.id]
That looks like the problem. Try
"question_%f"%question.id
or
"question_"+ str(question.id)
Most likely it's highlighting the last line only because you split the statement over multiple lines.
The fix for the actual problem will most likely be changing
self.fields['question_' + question.id]
to
self.fields['question_' + str(question.id)]
As you can quickly test in a Python interpreter, adding a string and a number together doesn't work:
>>> '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'