string.isalpha () возвращает False в соответствии с пользовательским валидатором django, независимо от того, содержит ли строка число или нет - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь использовать пользовательскую проверку в поле модели Django CharField.Я проверяю, есть ли в имени номер.Если это так, поднимите ValidationError.Я использую линию if name.isalpha() is False: raise ValidationError.По какой-то причине это приравнивается к False, независимо от того, присутствует ли число в строке или нет.Я проверил, чтобы убедиться, что name было значением, которое я ожидал, и что это действительно строка.Вот мой код:

models.py

name = models.CharField(validators=[validate_name], max_length=100, default='', unique=True)

validation.py

from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _


def validate_name(name):
    print(name.isalpha())

    if name.isalpha is False:
        raise ValidationError(
            _('Name can only contain letters A-Z. Not numbers.'),
            params={'name': name},
        )

1 Ответ

0 голосов
/ 14 февраля 2019

изменить на

if name.isalpha() is False:
        raise ValidationError(
            _('Name can only contain letters A-Z. Not numbers.'),
            params={'name': name},
        )

Кроме того, вы можете использовать RegexValidator для сохранения некоторых строк кода

from django.core.validators import RegexValidator

letters_only = RegexValidator(r'^[a-zA-Z ]*$', _('Only letters are allowed.'))
...