Django MPTT Admin

Продолжаем наводить лоск в админке, сейчас сделаем вот так:

Источник: https://github.com/django-mptt/django-mptt/blob/master/docs/admin.rst

admin.py
from mptt.admin import DraggableMPTTAdmin
from ipam.models import Prefix

# Регистрируем модель
admin.site.register(
	Prefix, 
	DraggableMPTTAdmin,
		list_display=(
			'tree_actions',  # Служебное. Вот это вот нужно что бы оно заработало
			'indented_title', # Служебное. Вот это вот нужно что бы оно заработало
			'utilization', 
			'vrf', 
			'location',
			'owner', 
			'router', 
			'protocol', 
			'description'),
		list_display_links=(
			'indented_title', # Служебное.
		),
		list_filter = ('vrf', 'owner'),
)

Django Admin Actions — действия с промежуточной страницей

Панель администратора Django позволяет создавать дополнительные экшены, на примере дефолтного: удлалить несколько объектов. В данной заметке, я сохранил рецепт как создать экшен для изменения категории с промежуточной страницей.

(далее…)

MPTT

Поговорим о способе реализации иерархического хранения данных со структурой каталогов. Отличный пример — интернет магазин, где определенный товар находится в определенной ветке дерева категорий. Или иерархия адресов: Когда для определенных городов, есть общий родитель — государство и т.д.

В данном случае, необходимо пройти по дереву с применением рекурсии. Однако в Django уже есть готовое решение  django-mptt.

MPTT(Modified Preorder Tree Traversal) / Nested Sets  — один из способов обхода деревьев категорий. В двух словах — метод обхода иерархических деревьев, когда в БД есть структура:  id, parent_id, name. А нам необходим способ рекурсивно пройти по нему извлечь ветки для потомком особо не нагружая базу данных

(далее…)