charfield 的自定义验证器不会引发任何错误
Posted
技术标签:
【中文标题】charfield 的自定义验证器不会引发任何错误【英文标题】:custom validator for charfield do not raise any error 【发布时间】:2021-04-08 06:52:21 【问题描述】:我已经做了一个验证器,它应该检查来自字符域的输入:
def postnvali(value):
if not value.isalnum():
raise ValidationError(_('postnummer måste vara siffror'))
在以下模型中使用:
class Adress(Model):
street=CharField(max_length=100)
snumb=CharField(max_length=15)
town=CharField(max_length=100)
postn=CharField(max_length=5,validators=[postnvali])
def __str__(self):
return 'city: ' + self.town
class Meta:
ordering=('street','town')
但是当使用 admin 并输入错误的格式时,什么也没有发生,也没有错误消息。为什么?
【问题讨论】:
错误的格式是什么样子的?您能解释一下您要验证的什么吗? 【参考方案1】:函数str.isalnum(…)
返回:
如果 S 中的所有字符都是字母数字,则返回 True。
这意味着字符可以是数字 (0-9) 或 字母 (A-Za-z),但根据错误消息,您希望只允许 digits 。因此你应该使用函数str.isdigit(…)
:
如果字符串中的所有字符都是数字并且至少有一个字符,则返回 True,否则返回 False。
所以我们可以将验证器重写为:
def postnvali(value):
if not value.isdigit():
raise ValidationError(_('postnummer måste vara siffror'))
【讨论】:
以上是关于charfield 的自定义验证器不会引发任何错误的主要内容,如果未能解决你的问题,请参考以下文章