2011-08-02 4 views
0

CheckBoxSelectMultiple을 사용하여 사용자가 선택할 항목 목록을 표시하고 있습니다. 내가 저장하려고하면, 그것은 나에게 오류를 제공합니다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에 대한 내 사용자 지정 개체를 생각합니다. 제거하는 것은 도움이되지 않습니다. 당신은 당신의 품목이 아닌 객체 자체에서 값 목록을 다시받을거야

https://code.djangoproject.com/browser/django/trunk/django/forms/widgets.py 

답변

0

: 여기

장고의 소스에 대한 링크입니다. 당신은 당신 자신의 아이템리스트에있는 값들로부터 그 객체들을 인스턴스화 할 필요가있을 것이다.

forms.ModelForm 대신 forms.Form을 상속하므로 Django는 항목 목록의 값에서 개체를 인스턴스화하지 않습니다.

+0

응답 해 주셔서 감사합니다. 나는 그냥 딕트 (dict)를 사용하여 끝내고 유니 코드를 키로 사용하여 정확한 객체를 꺼냈다. – sharkfin

관련 문제