Найти - Пользователи
Полная версия: Сбор информации о наследниках абстрактной модели
Начало » Django » Сбор информации о наследниках абстрактной модели
1
EvgIq
Имеем исходное приложение app_templ

models.py

class TableName(models.Model):
	name = models.CharField(max_length=100)
#
class TableAbstract(models.Model):
	...
	class Meta:
        	abstract = True


Приложение app1

models.py

from app_templ.models import TableAbstract
class Table1(TableAbstract)
	...


Приложение app2

models.py

from app_templ.models import TableAbstract
class Table2(TableAbstract)
	...

И так далее… Приложений, использующих абстрактную модель может быть много.

Мне нужно, чтобы в TableName, записывались имена моделей (таблиц) наследников.

Как это сделать при помощи кодирования только в приложении app_templ?
FishHook
EvgIq
Мне нужно, чтобы в TableName, записывались имена моделей (таблиц) наследников.
Стандартный вопрос, а зачем?
Получить наследников TableAbstract вы и так можете в любой момент, зачем их писать в базу?
EvgIq
FishHook
На самом деле, помимо записи потомков абстрактной модели в таблицу, мне надо выполнять еще кое-какой SQL код. Но суть остается той-же. Я не знаю где и как это сделать в исходном приложении.
FishHook
EvgIq
На самом деле, помимо записи потомков абстрактной модели в таблицу, мне надо выполнять еще кое-какой SQL код
Вы для ЦРУ пишите программу что ли, к чему такая секретность?
Расскажите, что хотите сделать. Скорее всего вам не нужна такая таблица, а то что вы придумываете можно сделать другими более простыми способами. Вы понимаете, что выполнение “кое какого sql-кода” вам надо будет завязать на механизм миграций, то есть серьезно вмешиваться в глубины фреймворка?
EvgIq
FishHook
Я понимаю все сложности :). Секретности здесь нет. Речь идет о создании приложении для Django+PostgreSQL, которое реализует иерархию в виде дерева с заранее известной размерностью. Несколько лет назад я написал статью об этом. В ней можно понять о чем речь.
На данный момент реализация работы с ключем сделана средствами БД PostrgeSQL (в триггерных функциях). Приложение сейчас работает. Но для каждой таблицы-наследницы необходимо руками выполнять скрипт (пример для board_group):

ALTER TABLE board_group ADD COLUMN holes bigint[];
INSERT INTO board_group values (-9223372036854775808,0,0,0,0,-9223372036854775808);
INSERT INTO tree_size values ('board_group',6,1624);
CREATE TRIGGER after_upd
  AFTER UPDATE
  ON board_group
  FOR EACH ROW
  EXECUTE PROCEDURE tree_after_upd_parent();
CREATE TRIGGER before_del
  BEFORE DELETE
  ON board_group
  FOR EACH ROW
  EXECUTE PROCEDURE tree_before_del_row();
CREATE TRIGGER before_new
  BEFORE INSERT
  ON board_group
  FOR EACH ROW
  EXECUTE PROCEDURE tree_before_new_id();

Можно оставить и так, ничего сложного вроде нет. Но мне интересно автоматизировать и это.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB