2017-07-17 43 views
1

我需要MultipleChoiceField和聯機註冊應用程序。當我嘗試在字段中使用它們時,我得到一個未知的字段錯誤。他們也不會出現在管理面板中。Django:如何在表單/管理中使用MultipleChoiceField

# models.py 
... 
CHILDCARE_REASONS = (('Working', 'working'),('Training', 'training'),('Teen Parent', 'teen_parent'),('Working W/Child With A Disability', 'child_disability'),('Adult W/Disability', 'adult_disability'),) 
reasons_for_childcare = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=CHILDCARE_REASONS) 
... 

# forms.py 
class EnrollForm(forms.ModelForm): 
class Meta: 
    model = EnrollmentApplication 
    fields = [ 
     ... 
     'reasons_for_childcare ', 
     ... 
    ] 

回答

1
  1. 不要在模型中使用表單域,這是不對的。對於多選字段,我建議改爲django-multiselectfield

  2. 您將需要更改元組順序,正確的方法是首先鍵,然後是值。

  3. 字段字符串「reasons_for_childcare」末尾有一個額外的空格。

因此,考慮到這一點,解決方法是這樣的:

models.py

from multiselectfield import MultiSelectField 


class EnrollmentApplication(models.Model): 
    CHILDCARE_REASONS = (('working', 'Working'), 
         ('training', 'Training'), 
         ('teen_parent', 'Teen Parent'), 
         ('child_disability', 'Working W/Child With A Disability'), 
         ('adult_disability', 'Adult W/Disability')) 
    reasons_for_childcare = MultiSelectField(choices=CHILDCARE_REASONS) 

forms.py

class EnrollForm(forms.ModelForm): 
    class Meta: 
     model = EnrollmentApplication 
     fields = [ 
      'reasons_for_childcare', 
     ]