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 的自定义验证器不会引发任何错误的主要内容,如果未能解决你的问题,请参考以下文章

Parsley.js 中的自定义正则表达式验证器

为啥 Prometheus 不会在不可见的指标上引发错误?

为啥我的 Django 表单没有引发验证错误?

如何通过django信号引发自定义错误消息?

Django admin 中的自定义验证

如何处理 grails spring-security-rest 插件中的自定义身份验证异常?