在Clean Fields -Django中包含验证

时间:2012-09-05 09:39:29

标签: python django forms validation

由于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()方法完成,即不在外面编写任何额外的函数。任何帮助将不胜感激。

1 个答案:

答案 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/