保存CheckBoxSelectMultiple时接收unicode而不是我的对象

时间:2011-08-02 22:13:14

标签: django django-forms

我正在使用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

1 个答案:

答案 0 :(得分:0)

您将从项目中获取值列表,而不是对象本身。您需要自己从项目列表中的值中实例化这些对象。

因为你是继承自forms.Form而不是forms.ModelForm,所以Django不会从你的项目列表中的值中实例化对象。