Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Сбор информации о наследниках абстрактной модели [RSS Feed]

#1 Сен. 13, 2015 09:34:51

EvgIq
От:
Зарегистрирован: 2009-11-14
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Сбор информации о наследниках абстрактной модели

Имеем исходное приложение 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?



Отредактировано EvgIq (Сен. 13, 2015 09:36:30)

Офлайн

#2 Сен. 13, 2015 11:01:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Сбор информации о наследниках абстрактной модели

EvgIq
Мне нужно, чтобы в TableName, записывались имена моделей (таблиц) наследников.
Стандартный вопрос, а зачем?
Получить наследников TableAbstract вы и так можете в любой момент, зачем их писать в базу?



Офлайн

#3 Сен. 13, 2015 12:32:38

EvgIq
От:
Зарегистрирован: 2009-11-14
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Сбор информации о наследниках абстрактной модели

FishHook
На самом деле, помимо записи потомков абстрактной модели в таблицу, мне надо выполнять еще кое-какой SQL код. Но суть остается той-же. Я не знаю где и как это сделать в исходном приложении.



Отредактировано EvgIq (Сен. 13, 2015 12:39:05)

Офлайн

#4 Сен. 13, 2015 12:41:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Сбор информации о наследниках абстрактной модели

EvgIq
На самом деле, помимо записи потомков абстрактной модели в таблицу, мне надо выполнять еще кое-какой SQL код
Вы для ЦРУ пишите программу что ли, к чему такая секретность?
Расскажите, что хотите сделать. Скорее всего вам не нужна такая таблица, а то что вы придумываете можно сделать другими более простыми способами. Вы понимаете, что выполнение “кое какого sql-кода” вам надо будет завязать на механизм миграций, то есть серьезно вмешиваться в глубины фреймворка?



Офлайн

#5 Сен. 13, 2015 12:53:15

EvgIq
От:
Зарегистрирован: 2009-11-14
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Сбор информации о наследниках абстрактной модели

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();

Можно оставить и так, ничего сложного вроде нет. Но мне интересно автоматизировать и это.



Отредактировано EvgIq (Сен. 13, 2015 12:59:30)

Офлайн

  • Начало
  • » Django
  • » Сбор информации о наследниках абстрактной модели[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version