Миграции для текстовых полей

Часто, при добавлении новых полей в модель/БД, и выполнении ./manage.py makemigrations, django хочет знать, чем заполнить поля в строках таблицы которые уже есть или могут быть. Null он туда подставить не может, т.к. поле текстовое, поэтому выбираем 1 и указываем ""

You are trying to add a non-nullable field 'tree_id' to vrf without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py
Select an option: 1
Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now()
>>> ""

WSGI в двух словах

Работа с веб отличается от работы с не-веб одной простой вещью:
— сервер (апач, нжинкс и т.п.) получает запрос (а запрос — это строка) от браузера,
— сервер обращается к приложению, передавая ему эту строку как аргумент,
— приложение возвращает результат (тоже строку),
— сервер отдаёт полученную строку в браузер.
Конкретно для питона такое подключение скрипта к веб-серверу решается с помощью WSGI.

(далее…)

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'),
)

JSTree: Стандартный список

JSTree — Отличная библиотека для работы со списками ul>li или генерированными с помощью json.  В данном примере рассмотрим академический пример для построения простого дерева из стандартного списка. Как backend использую Django.

Дополнительное чтиво:

(далее…)

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

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

(далее…)

MPTT

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

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

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

(далее…)