string.isalpha() 在自定义 django 验证器下返回 False 是否字符串包含数字

string.isalpha() returning False under custom django validator whether string contains a number or not

我正在尝试对 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},
        )

改为

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.'))