首页 > 解决方案 > 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 表单来说是非常标准的,所以我怀疑问题是否存在,如果我采用该验证器并将其配置为表单的干净功能,它实际上可以工作。但是,我想使用验证器。有谁知道可能导致问题的原因?谢谢。

标签: pythondjangodjango-formsdjango-validation

解决方案


我解决了。原来是表单代码中的其他东西导致了问题,而不是验证器本身。


推荐阅读