формы? Чтобы form.save() не выполнялась при определнных условиях
Переопредели этот метод у своей формы и проверяй там
Validate у филдов
метод формы clean()
предложили в save, вроде так работает. В чем разница подходов?
save() срабатывает только если форма прошла валидацию и в ней что-то менялось clean() - метод для кастомных манипуляций. И если там зарегистрировать ошибку (self.add_error()), то save() не вызовется (форма не валидна) и ошибку легко вывести для юзера из form.errors (админка сама выведет)
Т.е. валидация выполняется в рамках конкретной формы. А если я например хочу убедиться что в базе не больше 10 записей, то это лучше сделать в save()?
Я б сделал в базе :)
хранимыми процедурами?
я в clean() у формы писал запрос. можно в Meta модели, прописать ограничение. Но придется ловить исключение и самому его обрабатывать. Форма не поймает.
понял, спасибо за разъяснение
возникла такая мысль, представь, мы провалидировали форму по кастомным правилам, и тут внезапно асинхронно база меняется (например другой пользователь сохраняет данные раньше нас) но форма уже провалидирована и записывается в базу. Неправильно. Нужно это в транзакцию засовывать. Или действительно констрейнтами.
если вьюха и сохранять в разные таблицы, то я бы обернул в транзакцию, +, при таком раскладе, думаю, ограничение в БД нужно: При сохранении, сработало ограничение - транзакция откатилась (изменения в других таблицах также откатились) Если изменяется только одна таблица, то, думаю, ограничения в БД должно хватить
в админке, вьюхи, полностью обернуты в транзакции
спасибо
Обсуждают сегодня