python - Django 表单字段上的验证器给出属性错误
问题描述
我为我制作的 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 表单来说是非常标准的,所以我怀疑问题是否存在,如果我采用该验证器并将其配置为表单的干净功能,它实际上可以工作。但是,我想使用验证器。有谁知道可能导致问题的原因?谢谢。
解决方案
我解决了。原来是表单代码中的其他东西导致了问题,而不是验证器本身。