Skip to main content
 首页 » 编程设计

python之Django:如何在表单/管理员中使用 MultipleChoiceField

2024年10月01日38Terrylee

我需要一个 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. 不要在模型中使用表单字段,这是不对的。对于多项选择字段,我推荐 django-multiselectfield相反。

  2. 你需要改变元组的顺序,正确的方式是键在前,值在后。

  3. 在您的字段字符串“reasons_for_childcare”的末尾有一个额外的空格。

因此,考虑到这一点,解决方案将如下所示:

模型.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) 

表单.py

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