пользовательский валидатор для charfield не вызывает никаких ошибок

#django #validation #model #field

#django #проверка #Модель #поле

Вопрос:

Я создал валидатор, который должен проверять входные данные из 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')
 

но при использовании admin и вводе неправильного формата ничего не происходит, сообщения об ошибке нет. почему?

Комментарии:

1. Как выглядит неправильный формат? Можете ли вы объяснить, что вы хотите проверить?

Ответ №1:

Функция str.isalnum(…) возвращает:

Возвращает True, если все символы в S являются буквенно-цифровыми.

Это означает, что символы могут быть числами (0-9) или алфавитными (A-Za-z), но, основываясь на сообщении об ошибке, вы хотите разрешить только цифры. Таким образом, вы должны использовать функцию str.isdigit(…) :

Возвращает True, если все символы в строке являются цифрами и есть хотя бы один символ, в противном случае False .

Таким образом, мы можем переписать валидатор на:

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