在Django中,有一种方法可以将选择显示为复选框?

时间:2020-03-06 14:51:47  来源:igfitidea点击:

在管理界面和新表单中,能够定义选择的功能非常出色。我们可以使用如下代码:

APPROVAL_CHOICES = (
    ('yes', 'Yes'),
    ('no', 'No'),
    ('cancelled', 'Cancelled'),
)

client_approved = models.CharField(choices=APPROVAL_CHOICES)

在表单中创建一个下拉框,并强制用户选择这些选项之一。

我只是想知道是否有一种方法可以定义一组选择,可以使用复选框选择多个? (也可以说用户可以选择最大数量。)这似乎是一个可能已实现的功能,只是我似乎在文档中找不到它。

解决方案

就表单库而言,我们可以将MultipleChoiceField字段与CheckboxSelectMultiple小部件一起使用。我们可以通过为该字段编写验证方法来验证选择的数量:

class MyForm(forms.Form):
    my_field = forms.MultipleChoiceField(choices=SOME_CHOICES, widget=forms.CheckboxSelectMultiple())

    def clean_my_field(self):
        if len(self.cleaned_data['my_field']) > 3:
            raise forms.ValidationError('Select no more than 3.')
        return self.cleaned_data['my_field']

要在管理应用程序中获取此信息,我们需要自定义ModelForm并覆盖适当的ModelAdmin中使用的表单。