2015-10-19 4 views
1

Недавно я узнал, что его можно определить валидацию формы Django непосредственно в файле models.py. Это можно сделать следующим образом:Django: Порядок проверки в моделях

fev1_liter = models.DecimalField(validators=[MaxValueValidator(8.2), 
      MinValueValidator(0.3)], 
      max_digits=3, decimal_places=2) 

Это огромная альтернатива проверки в forms.py, но у меня есть очень досадная проблема: Как я могу контролировать, в каком порядке проверка выполняется? В этом примере Django сначала проверит, соответствуют ли цифры ввода в формате x.xx, а затем min и max. Это приводит к некоторым очень запутывающим сообщениям об ошибках. Спасибо заранее!

+0

Можете ли вы разместить эти сообщения об ошибках? – Ivan

+0

, если вы введете 25, сообщение об ошибке «только одна цифра до разрешенного разделителя», а не более удобное для пользователя значение должно быть между 0,3 -8,2 ». – Vingtoft

ответ

1

Для каждого поля модели, field.clean() первых выполняет проверку поля через field.validate(), затем через field.run_validators(), валидаторы вызываются в порядке они возвращаются из field.validators итератора.

Это имеет смысл, потому что в общем случае вы можете ожидать, что ваши валидаторы потерпят неудачу, если проверка поля не удалась, поэтому она упрощает отладку. Помните, что полевые валидаторы необязательны, поэтому field.validate() имеет преимущество. Если вы хотите изменить поведение, вам придется создать свои собственные классы Field и переопределить поведение field.clean().

Для получения более подробной информации вы можете ознакомиться с field sources.

+0

Я надеялся, что было непросто обходное решение. Но имеет смысл, почему валидация находится в текущем порядке. Спасибо за ответ. – Vingtoft

Смежные вопросы