📜  MultipleChoiceField – Django 表单(1)

📅  最后修改于: 2023-12-03 15:33:00.549000             🧑  作者: Mango

MultipleChoiceField - Django 表单

在 Django 中,表单是一种用于从用户那里收集数据的机制。Django 表单类包含多个字段,每个字段代表表单中的输入控件。

MultipleChoiceField 是 Django 表单中的一种字段类型。它允许用户从多个选项中选择一或多个选项。

以下是创建 MultipleChoiceField 字段的一些示例。

创建一个简单的 MultipleChoiceField
from django import forms

class ExampleForm(forms.Form):
    OPTIONS = [
        ('1', 'Option 1'),
        ('2', 'Option 2'),
        ('3', 'Option 3'),
    ]
    example_field = forms.MultipleChoiceField(choices=OPTIONS)

此代码演示了如何创建一个简单的 MultipleChoiceField,其中 example_field 是字段的名称,OPTIONS 是一个选项元组列表。每个元组包含两个元素:选项的值和选项的显示名称。

指定默认值
class ExampleForm(forms.Form):
    OPTIONS = [
        ('1', 'Option 1'),
        ('2', 'Option 2'),
        ('3', 'Option 3'),
    ]
    DEFAULT_CHOICES = ['1', '2']
    example_field = forms.MultipleChoiceField(choices=OPTIONS, initial=DEFAULT_CHOICES)

上面的代码指定 DEFAULT_CHOICES 列表作为默认选项。

使用 widget
class ExampleForm(forms.Form):
    OPTIONS = [
        ('1', 'Option 1'),
        ('2', 'Option 2'),
        ('3', 'Option 3'),
    ]
    example_field = forms.MultipleChoiceField(choices=OPTIONS, widget=forms.CheckboxSelectMultiple)

在这个示例中,我们使用 CheckboxSelectMultiple 将多个复选框放在同一个表单字段中。如果您想要在同一个表单字段中显示多个单选按钮,请使用 RadioSelect

验证选择
class ExampleForm(forms.Form):
    OPTIONS = [
        ('1', 'Option 1'),
        ('2', 'Option 2'),
        ('3', 'Option 3'),
    ]
    example_field = forms.MultipleChoiceField(choices=OPTIONS)

    def clean_example_field(self):
        data = self.cleaned_data['example_field']
        if '1' in data and '2' in data:
            raise forms.ValidationError("You cannot select both Option 1 and Option 2.")
        return data

上面的代码演示了如何验证表单字段。请注意 clean_example_field 方法的签名:它必须以“clean_”开头,后跟字段的名称。

clean_example_field 中,我们检查用户是否同时选择了选项1和选项2。如果是这样,我们会引发 ValidationError,并显示恰当的错误消息。

结论

使用 MultipleChoiceField,您可以让用户从多个选项中进行选择。您可以通过指定选项,设置默认值,使用 widget 或验证选择来自定义字段的行为。