我正在使用CheckBoxSelectMultiple来显示供用户选择的内容列表。当我尝试保存时,它给了我错误:
'unicode' object has no attribute 'name'
我的选择列表有2个元组,第一个项目是我要保存的自定义对象,第二个项目是人类可读的版本(字符串)。
forms.py:
# I have a list of my custom objects here, which is built dynamically
data = grab_data()
# Building the choice list
CHOICES = []
for item in data:
CHOICES.append((item, item.name))
class DisplayForm(forms.Form):
display = forms.MultipleChoiceField(choices=CHOICES, widget=widgets.CustomCheckboxSelectMultiple())
这是观点:
views.py:
....
if forms.is_valid():
items = request.POST.getlist('display')
for item in items:
print type(item) # Says it's unicode, not my custom object that I want to add to my model.
mymodel = PackageModel(name=item.name, etd=item.etd) # breaks here since 'item' is unicode object and not my custom object
mymodel.save()
....
查看CheckboxSelectMultiple源代码(非常类似于我使用的自定义源代码),我认为它在第706行,它试图在option_value上强制unicode,我认为它应该是我的自定义对象。删除它并没有帮助。
以下是Django源代码的链接:
https://code.djangoproject.com/browser/django/trunk/django/forms/widgets.py
答案 0 :(得分:0)
您将从项目中获取值列表,而不是对象本身。您需要自己从项目列表中的值中实例化这些对象。
因为你是继承自forms.Form而不是forms.ModelForm,所以Django不会从你的项目列表中的值中实例化对象。