Skip to main content

Django app to tree in DB.

Project description

Предупреждение! Вы можете свободно использовать приведенный код, но пока версия приложения не достигнет 1.х.х - не рекомендуется включать его "как есть" в рабочие проекты. То есть тестирование и исправление возможных багов, вы должны делать сами. Я это тоже делаю, по мере своих сил и возможностей.


На данный момент приложение тестировалось в Django 1.8, и БД PostgreSQL 9.1 и выше.

Установку можно произвести двумя способами.

## 1. Установка из git репозитария

Колнирование текущего репозитария создаст папку проекта `django_treensl`.

В нем имеется уже настроенное приложение для примера `myapp`.

В этом приложении присутствует пример описания иерархической модели `Group`, а так же готовый файл миграции, который, после выполнения команды `migrate`, подключит модель к триггерным функциям в БД PostgreSQL. БД, конечно же, надо предварительно создать и прописать корректные параметры подключения к ней в файле настроек проекта.

## 2. Стандартная установка

### 2.1. Установка пакета

`pip install django-treensl`

### 2.2. Подключение приложения

Подключить приложение `treensl` в `settings.py`:

INSTALLED_APPS = (
...,
'treensl',
)



Подробнее - смотри wiki к этому репозитарию




-------------
Приложение для создание структуры "дерево" в моделях Django типа — Вложенные
множества с ограничением по количеству уровней и возможному количеству детей
у родителя.

Ключ «id» - целочисленный. Либо int32 либо int64.
От размера целого зависят количества допустимых уровней и детей.

Связанный список с полями «id» и «parent», где «parent» ссылка на «id» родителя.

Значение нового «id» вычисляется на основании размерности дерева, «id» родителя,
и количества уже имеющихся у родителя детей.

Реализованное дерево сочетает достоинства деревьев типа «Связанный список»,
«Вложенные множества», «Материализованный путь».
Ключ — целое число (не строка).

Зная «id» элемента и размерность дерева (а мы всегда это знаем) можно осуществить:
- Вычисление диапазона детей, без запроса к БД
- Вычисление списка родителей, без запроса к БД
- Почти всегда, для получения данных, можно обойтись одним запрос к таблице

Недостаток — ограниченность размерности дерева разрядностью ключа.
После выбора размерности дерева, и начала работы с ним (то есть с заполнением таблицы),
будет уже нельзя изменить размерность.

Описание алгоритма в моей статье:
http://habrahabr.ru/post/166699/

Состав репозитария:

django_treensl — проект Django.

treensl — приложение, реализующее описание абстрактных таблиц-деревьев и
осуществляющее настройку БД (создание триггерных функций, вспомогательных функций,
таблицы хранящей размерности таблиц-деревьев).

myapp — приложение для примера. В нем создается модель-дерево, наследница от одной
из абстрактных таблиц приложения treensl, записывается во вспомогательную таблицу
размерность дерева, вставляется в дерево начальный элемент (первая запись, родитель
для всех остальных), и производится подключение таблицы к триггерным функциям в БД.

docs — на данный момент в этой папке один файл, текст программы для помощи в выборе
размерности дерева и «id» начального элемента. Программа на python2.

calc_values.py — в нем функции для вычисления диапазона детей, и списка родителей
без обращения к БД. Эти функции могут быть использованы в приложении myapp.

Приложение создавалось в Django 1.8

БД пока только PostgreSQL 9.1 +

Для установки скопируйте репозитарий к себе на диск, создайте БД, поменяйте настройки
в settings.py на свои, выполните manage.py migrate... можно запускать и смотреть работу
тестовой таблицы Group

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-treensl-0.1.8.tar.gz (12.8 kB view details)

Uploaded Source

File details

Details for the file django-treensl-0.1.8.tar.gz.

File metadata

File hashes

Hashes for django-treensl-0.1.8.tar.gz
Algorithm Hash digest
SHA256 58f4b56969180af124ad70ea16c1ce71236c869e1d6caef338f1ee69338cafc9
MD5 9687de327c68b6e664eb1f99980cf526
BLAKE2b-256 f3bf3ae930eee62c3d49921e04660ebfb38e9a5e87b84ac2402e687f39a544c8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page