0

由于 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() 方法来完成,即无需在外部编写任何额外的函数。任何帮助都感激不尽。

4

1 回答 1

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.")

然后NoSpacesCharField像通常使用 forms.CharField 一样使用。

我目前无法测试此代码,因此其中可能存在奇怪的扭结,但它应该可以帮助您完成大部分工作。有关 Django 中表单验证的更多信息,请参阅https://docs.djangoproject.com/en/dev/ref/forms/validation/

于 2012-09-05T10:03:53.240 回答