【问题标题】:custom validator for charfield do not raise any errorcharfield 的自定义验证器不会引发任何错误
【发布时间】: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 并输入错误的格式时,什么也没有发生,也没有错误消息。为什么?

【问题讨论】:

  • 错误的格式是什么样子的?您能解释一下您要验证的什么吗?

标签: django validation model field


【解决方案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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多