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

Часто, при добавлении новых полей в модель/БД, и выполнении ./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'),
)