我为我制作的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函数,它实际上是有效的。但是,我想使用验证器。有谁知道可能导致问题的原因是什么?感谢。
答案 0 :(得分:0)
我解决了。事实证明,表单代码中的其他内容导致了问题,而不是验证器本身。