首页 > 解决方案 > charfield 的自定义验证器不会引发任何错误

问题描述

我已经完成了一个验证器,它应该检查来自 charfield 的输入:

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

但是当使用管理员并输入错误的格式时,没有任何反应,没有错误消息。为什么?

标签: djangovalidationmodelfield

解决方案


函数str.isalnum(…)返回:

如果 S 中的所有字符都是字母数字,则返回 True 。

这意味着字符可以是数字 (0-9) 或字母(A-Za-z),但根据错误消息,您希望只允许数字。因此,您应该使用该功能str.isdigit(…)

如果字符串中的所有字符都是数字并且至少有一个字符,则返回 True,否则返回 False。

所以我们可以将验证器重写为:

def postnvali(value):
    
    if not value.isdigit():
        raise ValidationError(_('postnummer måste vara siffror'))

推荐阅读