我正在尝试在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'参数,我都会收到此错误。
发生了什么事?
答案 0 :(得分:33)
很可能只是突出显示最后一行,因为你将语句拆分为多行。
实际问题的修复很可能会改变
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'
答案 1 :(得分:6)
'question_'
是一个字符串,question.id
是一个字符串。您无法连接两种不同类型的东西,您必须使用str(question.id)
将长整数转换为字符串。
答案 2 :(得分:1)
可能question.id
是一个整数。尝试
self.fields['question_' + str(question.id)] = ...
代替。
答案 3 :(得分:1)
self.fields['question_' + question.id]
这看起来像是问题所在。试试
"question_%f"%question.id
或
"question_"+ str(question.id)
答案 4 :(得分:-2)
这是在一行中做太多事情的问题 - 错误消息变得不那么有用。如果你把它写成下面那么问题会更容易找到
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")])