23 марта 2011 г.

Цепочка вызовов методов валидации данных формы в Django

BaseForm.is_valid()
BaseForm._get_errors()
BaseForm.full_clean()
BaseForm._post_clean() -> {
    Model.clean_fields()
    Model.clean()
    BaseForm.validate_unique() -> Model.validate_unique()
}

Т.е. при вызове метода формы is_valid() и при наличии данных сначала вызывается метод full_clean(), который проходится по всем полям формы и валидирует каждое. Сначала значения приводятся к питоническому виду методом to_python() или выбрасывается исключение ValidationError. Затем данные валидируются "персональными" валидаторами полей, вызывается clean_<field>(), если таковой наличиствует. Следом, full_clean вызывает метод clean(). И если форма - экземпляр класса ModelForm, то _post_clean() делает следующее: присваивает значения экземпляру модели, независимо от результата is_valid; вызывает метод clean() модели.

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

Отправить комментарий