在Django中,有办法将选择项显示为复选框吗?

54 投票
2 回答
43374 浏览
提问于 2025-04-11 09:22

在管理界面和新表单中,有一个很棒的功能可以让你定义选项。你可以使用这样的代码:

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

client_approved = models.CharField(choices=APPROVAL_CHOICES)

来在你的表单中创建一个下拉框,强制用户选择其中一个选项。

我在想有没有办法定义一组选项,让用户可以通过复选框选择多个选项?(如果能限制用户最多选择几个,那就更好了。)看起来这个功能应该是已经实现的,只是我在文档中找不到相关信息。

2 个回答

0

@JonnyBuchanan 给出了正确的答案。

但是如果你需要在 Django 的管理后台中为很多模型使用这个功能,而你(像我一样)懒得去定制一个 ModelForm 并在 ModelAdmin 类里面重写相关的方法,你可以试试这个方法:

http://www.abidibo.net/blog/2013/04/10/convert-select-multiple-widget-checkboxes-django-admin-form/

93

在表单库方面,你可以使用 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 中使用的表单

撰写回答