charfield 的自定义验证器不会引发任何错误

custom validator for charfield do not raise any error

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

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

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

函数str.isalnum(…)returns:

Return True if all characters in S are alphanumeric.

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

Return True if all characters in the string are digits and there is at least one character, False otherwise.

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

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