由于django中的内置验证器接受即使只是空格输入到字段中。我想要一个验证,如果只有空格,那么它必须引发验证错误。我有一个这样的领域:
name = forms.CharField(max_length=200)
在外面使用验证器,即编写像这样的函数。
def validate_spaces(value):
if value.strip() == '':
raise ValidationError(u"You must provide more than just whitespace.")
但是,我在想是否可以使用form.clean()方法完成,即不在外面编写任何额外的函数。任何帮助将不胜感激。
答案 0 :(得分:2)
您可以通过以下方式向form.clean()添加自定义行为:
class YourForm(forms.Form):
# Everything as before.
...
def clean_name(self):
data = self.cleaned_data['name']
if data.strip() == '':
raise forms.ValidationError(u"You must provide more than just whitespace.")
# Always return the cleaned data, whether you have changed it or
# not.
return data
但是,如果要创建一种自动获得此类验证的字段,可以添加一个类似这样的新类
class NoSpacesCharField(forms.CharField):
def validate(self, value):
# Use the parent's handling of required fields, etc.
super(NoSpacesCharField, self).validate(value)
if value.strip() == '':
raise ValidationError(u"You must provide more than just whitespace.")
然后像通常使用forms.CharField一样使用NoSpacesCharField
。
我目前无法测试此代码,因此可能存在奇怪的问题,但它应该可以帮助您完成大部分工作。有关Django中表单验证的更多信息,请参阅https://docs.djangoproject.com/en/dev/ref/forms/validation/