Generation LOST Time to get lost

26Июл/110

Откровение девелопера

За последние несколько дней освоил дао postgres views & rules прицепленных к django-моделям для создания прозрачных many-to-many и one-to-one цепочек.

Задача проста: нам нужно вычисляемое поле на модели. Через django-ORM его вычислить не получиться. Считать для каждой записи может быть долго. Поэтому это дело выносится в слой БД. CREATE VIEW... и работа закипела.

На выходе мы должны получить вид с двумя (1 + кол-во вычисляемых полей) колонками. Первая колонка —связь one-to-one с родительской таблицей, остальные по вкусу. Связь надо только назвать по шаблону родительскаятаблица_ptr_id или прописать в дочерней модели поле вручную.

При помощи CREATE RULE можно поставить заглушку на удаление записей. Или даже не заглушку, а более умное действие, чтобы можно было прямо удалять из дочерней таблицы не задумываясь. INSERT/UPDATE по желанию.

Аналогично можно создать «фиктивные» m2m. Связать таблицы, которые явно с друг-другом не связаны, например. Создаем вид с двумя колонками (ссылки на первичные ключи связываемых таблиц) и в одной из моделей добавляем ManyToManyField.

CREATE RULE ON DELETE тут нужно прописывать явно, так как django обязательно будет пытаться удалить связь из этого вида при удалении записей из связываемых таблиц.

 

Связано с категорией: Python Оставить комментарий
Комментарии (0) Пинги (0)

Пока нет комментариев.


Leave a comment

Нет обратных ссылок на эту запись.