Я не согласен с принятым ответом. Я предпочитаю использовать проверку на уровне модели, чтобы избежать несоответствий в моделях, и проверку на уровне формы для любых ограничений, специфичных для сайта.
Предположим, у нас есть модель для событий с datetime
полями для времени начала и окончания. Проверка модели вынудит нас иметь время окончания, которое наступает после времени начала. Тем не менее, я бы оставил это в форме, чтобы подтвердить, что вновь созданное событие не в прошлом. Поэтому, если мне когда-либо понадобится добавить событие, которое происходило в прошлом, я мог бы использовать форму, специфичную для администратора, которая разрешает даты в прошлом, или просто добавить ее прямо в базу данных.
Таким образом, проверка модели должна проверять только те значения, которые явно ошибочны. но если вам когда-нибудь понадобится что-то напуганное (например, символы Unicode в имени пользователя для бота), оно должно позволить вам это сделать, даже если это происходит только через администратора или оболочку. Я прочитал ответ по StackOverflow, в котором предлагалось всегда использовать формы в бэкэнд-коде, заполняя поля кодом, подобным form["field"] = "value"
, чтобы получить пользу от последовательной проверки.