Изменение логики работы полей в админке Django

Обычно стандартного представления модели в админке джанго достаточно для целей редактирования и добавления материалов. Однако когда модель усложняется и хочется автоматизировать некоторые действия при наполнении сайта (создание ссылки для ЧПУ, проверка корректности имен файлов картинок) можно воспользоваться расширением моделей административного интерфейса (ModelAdmin).

Рассмотрим пример генерирования ЧПУ ссылки из заголовка новости.
У нас есть модель новости (model.py):

Как видно из описания модели, полный путь к новости выглядит как /news/<числовой идентификатор>/<символьный код>/. Числовой код у нас автоматически генерируется при добавлении записи, а вот символьный код мы должны откуда-то брать. В данной модели у нас символьный код система предлагает вводить вручную, что при массовом создании новостей утомляет. Однако, вполне может устроить вариант, когда символьный код генерируется из заголовка новости (поле title). Для реализации этого функционала воспользуемся возможностью перекрывать поведение модели данных в административном интерфейсе, сделав наследника от класса ModelAdmin.

Для реализации создаём файл admin.py в папке с приложением. С содержимым:

Во-первых, мы здесь убираем вывод поля символьного кода в админке новостей строчкой

затем устанавливаем обработчик на событие сохранения модели и устанавливаем значение поля code транслитерацией из заголовка новости, и сохраняем новость