Валидатор в поле формы Django выдает ошибку атрибута - PullRequest
0 голосов
/ 31 мая 2018

Я сделал валидатор для поля в форме Джанго, которую я сделал.Вот валидатор:

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])

Проблема возникает, когда я проверяю форму.Что должна делать форма при вводе неверного ввода, это показать ошибку проверки над полем.Когда я добавляю значение, которое должно пройти, например «а» или «3», форма работает нормально.Но когда я вставляю неверный ввод, такой как «a1», Django падает, и я получаю эту ошибку:

'NoneType' object has no attribute 'isdecimal'

Шаблон и представление довольно стандартны для форм Django, поэтому я сомневаюсь, что проблема есть, иесли я возьму этот валидатор и настрою его на чистую функцию формы, он на самом деле работает.Тем не менее, я хочу использовать валидатор.Кто-нибудь знает, что может быть причиной проблемы?Благодаря.

1 Ответ

0 голосов
/ 31 мая 2018

Я решил это.Оказывается, что проблема была вызвана чем-то другим в коде формы, а не самим валидатором.

...