Django表单字段上的Validator提供属性错误

时间:2018-05-31 13:53:36

标签: python django django-forms django-validation

我为我制作的Django表单上的字段创建了一个验证器。这是验证器:

from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy

def validate_value(value):
    if value.isalpha():
        if len(value) != 1:
            raise ValidationError(
                ugettext_lazy('Invalid zone value: %(value)s'),
                params={'value': value}
            )
    elif value.isdecimal():
        if int(value) == 0:
            raise ValidationError(
                ugettext_lazy('Invalid zone value: %(value)s'),
                params={'value': value}
            )
    else:
        raise ValidationError(
            ugettext_lazy('Invalid zone value: %(value)s'),
            params={'value': value}
        )

这个验证器所做的是接受一个字符串,看它是单个字母还是数字。如果它们中没有一个或那个数字等于零,那么它会引发验证错误。例如," a"和" 3"将被接受,但" a1"会引起错误。以下是验证器附加到的表单:

from django import forms
from values.validators import validate_value

class LetterOrNumberForm(forms.Form):
    value = forms.CharField(validators=[validate_value])

当我测试表单时出现问题。输入错误输入时表单应该执行的操作是在字段上方显示验证错误。当我输入一个应该通过的值时,比如" a"或" 3",表格正常。但当我输入一个错误的输入,例如" a1"时,Django崩溃了,我收到了这个错误:

'NoneType' object has no attribute 'isdecimal'

模板和视图是Django表单的标准,所以我怀疑问题是否存在,如果我使用该验证器并将其配置为表单的clean函数,它实际上是有效的。但是,我想使用验证器。有谁知道可能导致问题的原因是什么?感谢。

1 个答案:

答案 0 :(得分:0)

我解决了。事实证明,表单代码中的其他内容导致了问题,而不是验证器本身。