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.'))
我正在尝试对 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.'))