我希望我的ChoiceField在ModelForm中有一個空白選項(------),但它是必需的。所需的空白選項ChoiceField
我需要空白選項以防止用戶意外跳過該字段,因此選擇了錯誤的選項。
我希望我的ChoiceField在ModelForm中有一個空白選項(------),但它是必需的。所需的空白選項ChoiceField
我需要空白選項以防止用戶意外跳過該字段,因此選擇了錯誤的選項。
這適用於至少1.4及更高版本:
CHOICES = (
('', '-----------'),
('foo', 'Foo')
)
class FooForm(forms.Form):
foo = forms.ChoiceField(choices=CHOICES)
由於ChoiceField是(默認)要求,其會在被選中的第一選擇抱怨是空的,不會,如果第二。
這樣做比Yuji Tomita表現得更好,因爲這樣你可以使用Django的本地化驗證信息。
在參數添加空=真
這樣
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)
你可以用驗證字段
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="-------------")
這將保持所要求的形式,如果選擇-----
,將拋出一個驗證錯誤。
您也可以覆蓋表單的__init__()
方法並修改choices
字段屬性,重新分配新的元組列表。 (這可能對動態更改有用):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['my_field'].choices = [('', '---------')] + self.fields['my_field'].choices
這是一個好主意,它避免了寫一些自定義驗證器。 – 2014-11-28 12:45:14