所需ChoiceField中的空白选项

时间:2011-03-13 12:58:42

标签: django django-forms

我希望ModelForm中的ChoiceField有一个空白选项(------),但它是必需的。

我需要有空白选项以防止用户意外跳过该字段,从而选择了错误的选项。

4 个答案:

答案 0 :(得分:22)

这适用于至少1.4及更高版本:

CHOICES = (
    ('', '-----------'),
    ('foo', 'Foo')
)

class FooForm(forms.Form):
    foo = forms.ChoiceField(choices=CHOICES)

由于需要ChoiceField(默认情况下),它会在选择第一个选项时抱怨为空,如果是第二个选择则不会。

最好像Yuji Tomita所展示的那样这样做,因为这样你就可以使用Django的本地化验证信息了。

答案 1 :(得分:6)

您可以使用clean_FOO

验证字段
CHOICES = (
    ('------------','-----------'), # first field is invalid.
    ('Foo', 'Foo')
)
class FooForm(forms.Form):
    foo = forms.ChoiceField(choices=CHOICES)

    def clean_foo(self):
        data = self.cleaned_data.get('foo')
        if data == self.fields['foo'].choices[0][0]:
            raise forms.ValidationError('This field is required')
        return data

如果它是ModelChoiceField,您可以提供empty_label参数。

foo = forms.ModelChoiceField(queryset=Foo.objects.all(), 
                    empty_label="-------------")

这将保留所需的表单,如果选择-----,则会抛出验证错误。

答案 2 :(得分:0)

您还可以覆盖表单的__init__()方法并修改choices字段属性,重新分配新的元组列表。 (这可能对动态更改有用):

def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['my_field'].choices = [('', '---------')] + self.fields['my_field'].choices

答案 3 :(得分:-2)

参数中的

add null = True

像这样

gender = models.CharField(max_length=1, null = True)

http://docs.djangoproject.com/en/dev/ref/models/fields/


您的评论

THEME_CHOICES = (
    ('--', '-----'),
    ('DR', 'Domain_registery'),
)
    theme = models.CharField(max_length=2, choices=THEME_CHOICES)