среда, 16 ноября 2011 г.

django: контроль операций INSERT, UPDATE, DELETE

Механизм моделей Django позволяет контролировать операции вставки , изменения и удаления объектов из БД двумя способами (не считая триггеров непосредственно в БД):

Способ первый: Cигналы

Модуль django.dj.models содержит основной набор сигналов, связанных с операциями с БД: pre_save, ost_save, pre_delete, post_delete.
Довольно подробно работа с сигналами описана здесь
Мне, как еще не до конца искушенному django_разработчику для решения реальных задач сигналы пока не приходилось использовать. Поэтому какими-либо тонкостями работы с ними делиться было бы глупо))
А вот второй способ использую довольно активно.

Способ второй: переопределение методов Save, Delete класса Models в классах-наследниках.

А именно такими классами и описываются модели Django-приложений.
- Почему нет отдельного метода для update?
- Потому что для этого используется save.
Сигнатура метода save содержит 1 параметр, которым должен быть self. То есть ссылка на сам объект. У объекта, который еще ни разу не сохранялся в БД поле id пустое, а у того, который был считан из БД и предназначен для обновления (update) идентификатор уже инициализирован. Соответственно, простейшая проверка внутри обработчика сигнала позволяет разделить код обработки save от кода обработки update.

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

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

Если Вы нашли ошибку у автора, у Вас есть вопрос или просто хотите поделиться чем-то полезным, то пишите - не стесняйтесь..