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