web24.team

Django Unfold: современная админка Django, настройка и кастомизация

Как получить современную админку Django с пакетом django-unfold: установка, сайдбар, фильтры, табы, инлайны, дашборды с графиками, риски миграции и что нового в пакете в 2026 году.

Встроенная админка — одна из главных причин, по которой команды выбирают Django, и одновременно самая заметная его слабость: функционально она мощная, а выглядит и ощущается как интерфейс из 2010-х. Если в вашем проекте админкой пользуются менеджеры, контент-редакторы или клиенты, вопрос «как сделать современную админку Django» рано или поздно встаёт ребром. Ниже — разбор пакета django-unfold: какие проблемы стандартной админки он закрывает, что умеет из коробки, как устроены его инлайны и дашборды, на чём можно споткнуться при миграции и что изменилось в пакете за 2026 год. Статья одинаково полезна и заказчику, который решает, стоит ли обновлять админку, и разработчику, который будет это делать.

Почему стандартная админка Django выглядит устаревшей

Команда Django почти не трогает внешний вид админки с момента её появления: за двадцать лет она получила адаптивную вёрстку, тёмную тему и пару косметических правок, но структура интерфейса, фильтры и формы остались прежними. Функционально это по-прежнему сильнейший инструмент в экосистеме Python: генерация CRUD-интерфейса по моделям, права доступа, история изменений и инлайны достаются бесплатно — всё это мы разобрали в справочнике по возможностям админки Django.

Масштаб зависимости от админки хорошо виден в исследовании JetBrains «The State of Django 2026», в котором участвовали 3 500 разработчиков из более чем 40 стран. Больше половины респондентов (53%) строят на Django API-only приложения, 46% используют его как бэкенд для одностраничного приложения или отдельного JS-фронтенда, а 72% по-прежнему рендерят шаблоны на сервере. В API-only проектах Django конкурирует с FastAPI и Litestar, и один из решающих аргументов в его пользу — готовая админка, которую можно отдать команде поддержки в первый же день.

Проблема в том, что в реальных проектах админкой пользуются не только разработчики. Контент-менеджеры, служба поддержки, бухгалтерия, заказчики — все они каждый день видят серо-синий интерфейс с таблицами без единой иконки. Попыток это исправить было много: Grappelli, django-suit, Jazzmin, django-admin-interface, Baton, Jet. Большинство из них меняют только оформление, часть давно не обновляется. Первым пакетом, который довёл идею до полноценной замены, а не «перекраски», стал django-unfold.

Какие проблемы стандартной админки Django решает django-unfold

Unfold закрывает четыре группы проблем: внешний вид, навигацию, работу со списками и формами, отчётность.

Проблема стандартной админки Как это решает Unfold
Устаревший дизайн, нет тёмной темы для пользователя Интерфейс на Tailwind CSS, переключатель светлой и тёмной темы, настройка фирменных цветов через COLORS
Плоский список приложений вместо навигации Настраиваемый сайдбар с иконками, группами, бейджами-счётчиками и правами на каждый пункт
Нечем быстро найти нужную запись Command palette по ⌘K/Ctrl+K с поиском по моделям и данным, история запросов
Фильтры только по чекбоксам и ссылкам Диапазоны дат и чисел, выпадающие списки с мультивыбором, автокомплит, текстовый поиск по полю, кнопка «Применить»
Форма на 40 полей одним полотном Табы для fieldsets и инлайнов, сворачиваемые секции, условные поля, компактный режим полей
Инлайны на сотни записей тормозят Пагинация инлайнов, перетаскивание для сортировки, вложенные и несвязанные инлайны
Действия только через выпадающий список над таблицей Кнопки в шапке списка, в строке таблицы, в карточке объекта, рядом с «Сохранить», диалоги подтверждения с формой
Главная страница — список моделей Дашборд с карточками, графиками, таблицами, когортами и прогресс-барами через DASHBOARD_CALLBACK
Сторонние пакеты выглядят чужеродно Готовые интеграции для import-export, guardian, simple-history, celery-beat, constance, hijack, waffle и других

Важный момент для тех, кто оценивает риски: Unfold не заменяет django.contrib.admin, а наследуется от него. Все ваши ModelAdmin, права, list_display и сигналы продолжают работать, миграций в базе нет. Пакет поддерживает поэтапное внедрение, и в этом его главное отличие от «отдельных админок» вроде django-jet.

Что такое django-unfold и почему это лучшая тема для Django admin в 2026 году

django-unfold — open-source тема и набор расширений для админки Django, построенные на Tailwind CSS, HTMX и Alpine.js. У проекта 3,6 тысячи звёзд на GitHub, более 12 миллионов скачиваний с PyPI, релизы выходят почти каждую неделю: текущая версия 0.105 вышла 4 сентября 2026 года. Актуальные требования — Django 5.2+ и Python 3.12+.

Дашборд админки Django на django-unfold: метрики, когортная таблица и сайдбар с навигацией
Дашборд по умолчанию: KPI-карточки, когортная таблица, сайдбар с навигацией

Ключевые составляющие пакета:

  • Дизайн-система на Tailwind с полной поддержкой тёмной темы и настройкой палитры под бренд.
  • Сайдбар и command palette вместо плоского списка приложений.
  • Расширенные фильтры, табы, действия и инлайны, которые подключаются одним атрибутом в ModelAdmin.
  • Компоненты для дашбордов: карточки, графики на Chart.js, таблицы, трекеры, когорты, прогресс-бары.
  • Интеграции со сторонними пакетами и шаблонный пакет для django-crispy-forms.
  • Кастомные страницы и сайты для сценариев, которые не укладываются в CRUD.

Для сравнения: Jazzmin и Grappelli решают только первую задачу, django-admin-interface — первую и частично вторую. Unfold единственный из живых проектов закрывает весь список, поэтому в 2026 году он стал стандартным ответом на вопрос «какую тему для админки Django выбрать».

Как установить django-unfold и подключить его к проекту Django

Установка занимает пять минут: пакет ставится через pip, регистрируется первым в INSTALLED_APPS, а админ-классы наследуются от unfold.admin.ModelAdmin.

Порядок приложений критичен, Unfold должен стоять до django.contrib.admin, иначе его шаблоны не перекроют стандартные:

INSTALLED_APPS = [
    "unfold",                        # обязательно до django.contrib.admin
    "unfold.contrib.filters",        # расширенные фильтры
    "unfold.contrib.forms",          # WYSIWYG и array-виджеты
    "unfold.contrib.inlines",        # несвязанные инлайны
    "unfold.contrib.import_export",  # если используете django-import-export
    "django.contrib.admin",
    ...
]

Дальше меняется базовый класс админок. Стандартный admin.ModelAdmin продолжит работать, но формы останутся без стилей:

from unfold.admin import ModelAdmin

@admin.register(Order)
class OrderAdmin(ModelAdmin):
    list_display = ["number", "customer", "status", "total"]

Модели User и Group регистрирует сам Django, поэтому их нужно перерегистрировать с формами из unfold.forms, иначе страница смены пароля будет выглядеть как раньше:

from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from unfold.forms import AdminPasswordChangeForm, UserChangeForm, UserCreationForm

admin.site.unregister(User)

@admin.register(User)
class UserAdmin(BaseUserAdmin, ModelAdmin):
    form = UserChangeForm
    add_form = UserCreationForm
    change_password_form = AdminPasswordChangeForm

Вся настройка внешнего вида живёт в одном словаре UNFOLD в настройках проекта. Минимальный набор для интернет-магазина с названием, окружением и сайдбаром выглядит так:

UNFOLD = {
    "SITE_TITLE": "Demo Shop",
    "SITE_HEADER": "Demo Shop",
    "ENVIRONMENT": "shop.admin.environment_callback",  # плашка «Production»
    "SIDEBAR": {
        "show_search": True,
        "navigation": [
            {
                "title": "Продажи",
                "items": [
                    {"title": "Заказы", "icon": "shopping_cart",
                     "link": reverse_lazy("admin:shop_order_changelist"),
                     "badge": "shop.admin.new_orders_badge"},
                    {"title": "Товары", "icon": "inventory_2",
                     "link": reverse_lazy("admin:shop_product_changelist")},
                ],
            },
        ],
    },
}

Бейдж — это обычная функция, которая получает request и возвращает число новых заказов: менеджер видит счётчик прямо в меню, не открывая список. Иконки берутся из Material Symbols по имени.

Обзор возможностей django-unfold: виджеты и функции

Ниже — короткий обзор каждой группы функций с примером кода там, где он помещается в несколько строк. Полные примеры есть в документации на unfoldadmin.com и в демо-проекте Formula на GitHub.

Сайдбар, command palette и переключение сайтов

Сайдбар настраивается декларативно в UNFOLD["SIDEBAR"]: группы со сворачиванием, разделители, иконки, бейджи и permission на каждый пункт. С версии 0.94 ширину сайдбара можно тянуть мышью, а с 0.97 его сворачивание висит на горячей клавише. Command palette открывается по ⌘K, по умолчанию ищет приложения и модели, а при search_models в COMMAND ищет и по данным через search_fields каждой модели. Через SITE_DROPDOWN в шапку добавляется меню для переключения между несколькими админ-сайтами или ссылок на внешние сервисы.

Command palette в django-unfold с результатами поиска по моделям
Command palette: поиск по моделям и записям по ⌘K
Выпадающее меню сайта в шапке админки Unfold
SITE_DROPDOWN: переключение между сайтами и внешние ссылки
Светлая и тёмная тема админки django-unfold на одном экране
Светлая и тёмная темы переключаются пользователем

Фильтры для списков

Модуль unfold.contrib.filters добавляет фильтры, которых в стандартной админке нет: диапазон дат и чисел с календарём, выпадающие списки с мультивыбором и автокомплитом, текстовый поиск по одному полю, чекбоксы и радиокнопки с подсчётом результатов. Атрибут list_filter_submit = True включает кнопку «Применить», чтобы страница не перезагружалась на каждый клик.

from unfold.contrib.filters.admin import (
    RangeDateFilter, RangeNumericFilter, RelatedDropdownFilter,
)

class OrderAdmin(ModelAdmin):
    list_filter = [
        ("created_at", RangeDateFilter),
        ("total", RangeNumericFilter),
        ("customer", RelatedDropdownFilter),
    ]
    list_filter_submit = True
Фильтр по диапазону дат с календарём в админке django-unfold
Фильтр по диапазону дат с календарём
Выпадающий фильтр по связанной модели в Unfold
Dropdown-фильтр по связанной модели с поиском

Действия: кнопки в списке, строке и карточке объекта

Декоратор @action из unfold.decorators расширяет стандартный: у действия появляются иконка, цветовой вариант, права и место размещения. Действия делятся на четыре списка: actions_list над таблицей, actions_row в каждой строке, actions_detail в шапке формы и actions_submit_line рядом с «Сохранить». Действие с параметром dialog показывает модальное окно с формой и подтверждением до выполнения.

from unfold.decorators import action
from unfold.enums import ActionVariant

class OrderAdmin(ModelAdmin):
    actions_row = ["mark_shipped"]

    @action(description="Отправлен", icon="local_shipping",
            variant=ActionVariant.SUCCESS,
            permissions=["shop.change_order"])
    def mark_shipped(self, request, object_id):
        Order.objects.filter(pk=object_id).update(status="shipped")
        return redirect(request.META["HTTP_REFERER"])
Действия в строке таблицы changelist в django-unfold
actions_row: действия для конкретной записи прямо в таблице
Группировка действий в выпадающее меню в админке Unfold
Действия можно группировать в dropdown

Табы для списков, форм и инлайнов

Табы бывают четырёх видов. Changelist-табы объединяют несколько моделей в одну навигацию через UNFOLD["TABS"], fieldsets-табы делаются одним классом "tab" в описании fieldset, инлайны выносятся во вкладки атрибутом tab = True, а динамические табы строятся коллбэком. Если в форме есть ошибка валидации, с версии 0.77 Unfold сам откроет вкладку с проблемным полем.

fieldsets = [
    (None, {"fields": ["number", "customer", "status"]}),
    ("Доставка", {"classes": ["tab"], "fields": ["address", "courier"]}),
    ("Оплата", {"classes": ["tab"], "fields": ["payment_method", "paid_at"]}),
]
Changelist-табы для нескольких моделей в django-unfold
Changelist-табы: несколько списков под одной навигацией
Табы в форме редактирования объекта в Unfold
Табы в форме объекта
Fieldsets-табы внутри формы в админке django-unfold
Fieldsets-табы: секции формы во вкладках
Инлайны, вынесенные во вкладки в django-unfold
Инлайны во вкладках

Оформление колонок через декоратор display

@display из unfold.decorators умеет больше стандартного: цветные метки для статусов, двухстрочные ячейки с аватаром, выпадающие списки внутри ячейки и, с версии 0.105, форматирование цен. Это самый дешёвый способ сделать список заказов читаемым для менеджера.

from unfold.decorators import display

@display(label={"new": "info", "paid": "success", "cancelled": "danger"})
def show_status(self, obj):
    return obj.status

@display(header=True)
def show_customer(self, obj):
    return [obj.customer.full_name, obj.customer.email, obj.customer.initials]

Условные поля, WYSIWYG, массивы и JSON

Условные поля скрывают часть формы по выражению Alpine.js без единой строки JavaScript: conditional_fields = {"delivery_address": "delivery_type == 'courier'"}. WYSIWYG на редакторе Trix подключается через formfield_overrides с WysiwygWidget, для ArrayField PostgreSQL есть ArrayWidget вместо текстового поля, для JSON-полей — подсветка синтаксиса и интеграция с django-json-widget. С версии 0.88 компактный режим полей compressed_fields включён по умолчанию: подпись и поле стоят в одну строку, форма на 30 полей помещается в экран.

Встроенный WYSIWYG-редактор Trix в админке django-unfold
WYSIWYG-редактор без сторонних пакетов
Виджет для ArrayField PostgreSQL в Unfold
ArrayWidget вместо textarea для ArrayField
Форма на django-crispy-forms в стиле Unfold
Шаблонный пакет для django-crispy-forms

Раскрывающиеся строки, датасеты и метка окружения

list_sections добавляет в таблицу стрелку, по которой строка раскрывается: TableSection показывает связанные записи (позиции заказа под заказом), TemplateSection рендерит произвольный шаблон. Датасеты решают обратную задачу: показывают полноценный changelist со своим поиском и пагинацией внутри формы объекта, например все заказы клиента на странице клиента. Метка окружения через ENVIRONMENT красит шапку в красный на проде — простая настройка, которая спасает от случайного удаления записи не в той базе.

Раскрывающиеся строки таблицы с связанными записями в django-unfold
list_sections: связанные записи под строкой таблицы

Инлайны в Unfold: чем они отличаются от стандартных

Главное отличие: инлайны нужно наследовать от unfold.admin.TabularInline и StackedInline, а не от классов Django, иначе они отрисуются без стилей. Взамен инлайны получают набор атрибутов, которых в стандартной админке нет.

Атрибут Что делает
collapsible = True Инлайн свёрнут по умолчанию, раскрывается автоматически при ошибке валидации
show_title = False Скрывает заголовок инлайна (до версии 0.104 назывался hide_title)
show_count = True Показывает счётчик записей, текст и цвет можно переопределить через get_count
ordering_field = "weight" Сортировка перетаскиванием; поле должно быть PositiveIntegerField с db_index=True
hide_ordering_field = True Прячет само поле веса, оставляя только ручку для перетаскивания
per_page = 20 Пагинация инлайна для моделей с сотнями связанных записей
tab = True Выносит инлайн в отдельную вкладку формы
inlines = [...] Вложенные инлайны, один уровень вложенности, без many-to-many

Пример инлайна позиций заказа с сортировкой и пагинацией:

from unfold.admin import TabularInline

class OrderItemInline(TabularInline):
    model = OrderItem
    fields = ["sku", "quantity", "price"]
    ordering_field = "position"
    hide_ordering_field = True
    per_page = 20
    show_count = True

Два особых типа инлайнов стоит знать отдельно. Nonrelated inlines из unfold.contrib.inlines показывают под объектом записи без внешнего ключа на него: реализуется два метода, get_form_queryset и save_new_instance, а остальное делает Unfold. Nested inlines появились в версии 0.85 и позволяют показать под заказом позиции, а под каждой позицией её комплектующие, но ровно один уровень вниз. Ещё одна оговорка про сортировку: перетаскивать можно только сохранённые записи, новые строки сначала нужно сохранить.

В стандартной админке ничего из этого нет, а кастомные решения через сторонние пакеты (django-nested-admin, django-admin-sortable2) с Unfold не совместимы. Если проект на них завязан, план миграции должен учитывать переписывание этих инлайнов на встроенные механизмы Unfold.

Сортировка инлайнов перетаскиванием в django-unfold
Сортируемый инлайн: ручка для перетаскивания слева
Несвязанные инлайны без внешнего ключа в Unfold
Nonrelated inline: записи без FK на родителя

Дашборды, отчёты и графики в админке Django на Unfold

Дашборд в Unfold собирается из трёх частей: коллбэка, который готовит данные, шаблона главной страницы и библиотеки компонентов. Отдельного Python-класса дашборда нет, и это плюс: разработчик пишет обычную функцию и обычный Django-шаблон.

Коллбэк указывается в настройках и получает request и context. Для магазина в него удобно положить метрики за 30 дней и данные для графика в формате Chart.js:

def dashboard_callback(request, context):
    days = Order.objects.daily_totals(last=30)   # [(date, sum), ...]
    context.update({
        "kpi": [
            {"title": "Заказы за 30 дней", "metric": Order.objects.recent().count()},
            {"title": "Выручка", "metric": f"{Order.objects.revenue():,.0f} ₽"},
        ],
        "orders_chart": json.dumps({
            "labels": [d.strftime("%d.%m") for d, _ in days],
            "datasets": [{"label": "Заказы", "data": [total for _, total in days]}],
        }),
    })
    return context

Шаблон templates/admin/index.html наследуется от admin/base.html и раскладывает компоненты по сетке Tailwind:

{% extends "admin/base.html" %}
{% load unfold %}

{% block content %}
  <div class="flex gap-8 mb-8">
    {% for card in kpi %}
      {% component "unfold/components/card.html" with title=card.title %}
        {% component "unfold/components/text.html" %}{{ card.metric }}{% endcomponent %}
      {% endcomponent %}
    {% endfor %}
  </div>
  {% component "unfold/components/card.html" with title="Динамика заказов" %}
    {% component "unfold/components/chart/line.html" with data=orders_chart height=320 %}{% endcomponent %}
  {% endcomponent %}
{% endblock %}

Помимо карточек и графиков в наборе есть table.html для таблиц с сортировкой, tracker.html для «полоски здоровья» сервиса по дням, cohort.html для когортного анализа удержания клиентов и progress.html для выполнения плана. Версия 0.105 добавила настройки графиков: подписи осей, лимит делений, суффикс валюты на оси Y и произвольный объект options для Chart.js.

Когортная таблица удержания клиентов на дашборде django-unfold
Компонент cohort: удержание клиентов по когортам
Компонент tracker для отображения статусов по дням в Unfold
Tracker: статусы сервиса по дням
Прогресс-бар выполнения плана на дашборде Unfold
Progress: выполнение плана продаж

Когда одной главной страницы мало, в админку добавляются кастомные страницы: класс-представление с миксином UnfoldModelAdminViewMixin, title и permission_required, зарегистрированный в get_urls конкретного ModelAdmin. Так делаются отчёты по менеджерам, сверки с 1С или страница массовой загрузки прайса, которые живут внутри админки с её авторизацией и навигацией. Для сценария «одна кодовая база, несколько админок» с версии 0.99 есть SITE_VIEWS и кастомные сайты на UnfoldAdminSite: например, отдельная урезанная админка для партнёров на своём URL.

Гибкие сценарии: для чего ещё подходит админка на Unfold

Unfold превращает админку из инструмента «для разработчиков на случай чего» в полноценное внутреннее приложение. Типичные сценарии, где это окупается:

  • Бэкофис интернет-магазина. Заказы с цветными статусами, действия «Отправить» и «Вернуть деньги» в строке, датасет с историей заказов на странице клиента, дашборд с выручкой по дням.
  • CRM и поддержка. Интеграция с django-hijack (появилась в 0.95) даёт кнопку «Войти как пользователь» прямо в списке; django-guardian добавляет права на конкретные объекты, а не на модель целиком.
  • Контент и каталог. WYSIWYG для описаний, ArrayWidget для тегов, сортируемые инлайны для галерей, django-import-export для загрузки прайсов из Excel в интерфейсе с предпросмотром различий.
  • Операционный контроль. django-celery-beat для расписания фоновых задач, django-constance для настроек без деплоя, django-waffle (поддержка с 0.103) для фича-флагов, django-simple-history для аудита изменений с диффом.
  • Мультитенантность. Несколько UnfoldAdminSite с разными сайдбарами и правами: одна админка для сотрудников, вторая для партнёров, третья для клиентов с доступом только к своим данным.
Страница импорта данных django-import-export в стиле Unfold
django-import-export: импорт прайсов из файла
История изменений объекта django-simple-history в админке Unfold
django-simple-history: аудит изменений
Права на объект через django-guardian в админке Unfold
django-guardian: права на конкретную запись
Расписание периодических задач django-celery-beat в Unfold
django-celery-beat: периодические задачи

Возможные проблемы при замене стандартной админки на django-unfold

Переход на Unfold в существующем проекте занимает от пары часов до нескольких дней, и почти всё время уходит не на сам пакет, а на то, что вокруг него. До начала стоит пройтись по списку.

  1. Сторонние пакеты с собственными шаблонами. Всё, что рисует свои страницы в админке, без адаптации будет выглядеть как старая админка внутри новой. Для одиннадцати популярных пакетов есть готовые модули unfold.contrib.*, но, например, django-celery-beat требует перерегистрировать свои модели с unfold.admin.ModelAdmin и собственной формой. Пакеты вне списка (django-nested-admin, django-admin-sortable2, старые редакторы вроде django-ckeditor) придётся заменять или стилизовать вручную.
  2. Свои переопределённые шаблоны админки. Если в проекте лежит templates/admin/change_form.html из 2019 года, он перекроет шаблон Unfold и сломает вёрстку. Такие файлы нужно переписать под блоки Unfold или удалить.
  3. Версии Django и Python. В 2026 году пакет снял поддержку Django 4.2 (версия 0.90), 5.0 (0.91) и 5.1 (0.97), а также Python 3.10 (0.82) и 3.11 (0.92). На старом стеке остаётся только закрепить старую версию Unfold и жить без обновлений, поэтому обновление Django лучше запланировать в тот же проект.
  4. Частые релизы и переименования. Пакет выпускает версии почти еженедельно, и часть изменений ломающие: hide_title стал show_title, компактные поля включили по умолчанию, а обратную опцию убрали, интеграцию с django-modeltranslation объявили устаревшей. Закрепляйте точную версию в зависимостях и читайте changelog перед каждым обновлением.
  5. Собственные Tailwind-классы. Unfold поставляет скомпилированный CSS только для своих шаблонов. Если в кастомной странице или дашборде вы используете классы, которых там нет, их придётся собрать своим Tailwind CLI и подключить через STYLES.
  6. Кастомные list_filter и виджеты форм. Самописные фильтры и виджеты, наследованные от классов Django, будут работать, но без стилей. Обычно их проще переписать на аналоги из unfold.contrib.

Для больших проектов команда Unfold описывает безопасную стратегию: поднять второй UnfoldAdminSite на отдельном URL и переносить модели по одной, пока старая админка продолжает работать. Так менеджеры не остаются без инструмента ни на день. Если у вас нет времени проходить этот путь самостоятельно, мы делаем современные админки на Unfold и для новых проектов, и для существующих, включая аудит зависимостей и поэтапную миграцию, — пишите нам через форму на сайте.

Что изменилось в django-unfold в 2026 году

За восемь месяцев 2026 года вышло больше тридцати версий, с 0.75 до 0.105, и это не только косметика: появились вложенные инлайны, диалоги подтверждения, горизонтальные фильтры, кастомные сайты и переработанный дизайн почти всех экранов.

django-unfold в 2026 году: ключевые релизы
  1. Январь 20260.75–0.77: переход на uv, django-json-widget

    Сборка проекта переехала с Poetry на uv, появилась интеграция с django-json-widget, форма сама открывает вкладку с ошибкой.

  2. Февраль 20260.78–0.81: новые кнопки, аватары и Tailwind 4.2

    Переработанные кнопки и аватар пользователя, переключатель видимости пароля, чекбоксы и радиокнопки в новом дизайне.

  3. Март 20260.82–0.87: вложенные инлайны и компоненты

    Nested inlines, счётчик записей в инлайнах, компонент Link, красивые трейсбеки, глобальный коллбэк, снята поддержка Python 3.10.

  4. Апрель 20260.88–0.91: диалоги подтверждения

    Компактные поля по умолчанию, шаблоны до и после инлайна, диалог подтверждения для действий, снята поддержка Django 4.2 и 5.0.

  5. Май 20260.92–0.94: горизонтальные фильтры и сайдбар

    Горизонтальная раскладка фильтров, редизайн fieldset-табов, изменяемая ширина сайдбара, действия в строке как кнопки, снят Python 3.11.

  6. Июнь 20260.95–0.99: hijack, новый command palette, кастомные сайты

    Поддержка django-hijack, переработанные command palette и stacked-инлайны, горячие клавиши сайдбара, SITE_VIEWS, снята поддержка Django 5.1.

  7. Июль 20260.100–0.102: редизайн таблиц и интеграций

    Новая таблица changelist, переработанные экраны guardian, history, import-export и simple-history, список горячих клавиш, версия сайта в шапке, deprecated modeltranslation.

  8. Август 20260.103–0.104: Django 6.1 и waffle

    Поддержка Django 6.1 и django-waffle, переименование hide_title в show_title, кастомные иконки и CSS-классы бейджей в сайдбаре.

  9. 4 сентября 20260.105: новый дашборд по умолчанию

    Переработанные дашборд, фильтры и WYSIWYG, настройки графиков, форматирование цен в display, анимации модальных окон, убраны JS-зависимости фильтров.

Если сжать лето в три строки: в июне Unfold стал заметно удобнее для клавиатуры (command palette, шорткаты, история поиска), в июле получил единый дизайн для всех сторонних интеграций и таблиц, а в августе и начале сентября догнал Django 6.1 и переработал главную страницу. Для команд, которые сидели на версии 0.6x с 2025 года, это повод обновиться, но только после прочтения списка переименований из предыдущего раздела.

Что дальше

  • Если вы ещё не выжали максимум из стандартных ModelAdmin — фильтров, экшенов, инлайнов, прав и переопределения шаблонов — начните со справочника по админке Django: половина задач решается без смены темы.
  • Если дашборды в админке становятся аналитическим инструментом для бизнеса, посмотрите, где заканчиваются возможности отчётов в приложении и начинается работа с данными: «Может ли LLM заменить аналитика».
  • Если DASHBOARD_CALLBACK уже не хватает и нужна интерактивная аналитика с фильтрами и drill-down для пользователей, посмотрите обзор Apache Superset — там же пример встраивания его дашбордов в страницу на Django через UnfoldModelAdminViewMixin.

Коротко

Что такое django-unfold и чем он отличается от стандартной админки Django?

Тема и набор расширений поверх django.contrib.admin, а не отдельный фреймворк. Ваши ModelAdmin, права и модели остаются на месте, а интерфейс получает дизайн на Tailwind, тёмную тему, сайдбар, фильтры, табы и дашборды.

Как установить django-unfold в существующий проект Django?

Поставить пакет, добавить unfold в INSTALLED_APPS перед django.contrib.admin, заменить базовый класс админок на unfold.admin.ModelAdmin и перерегистрировать User и Group с формами из unfold.forms. Для сторонних пакетов подключаются модули unfold.contrib.*.

Можно ли сделать дашборд с графиками в админке Django?

Да: DASHBOARD_CALLBACK передаёт данные в шаблон главной страницы, а компоненты Unfold рисуют карточки, графики на Chart.js, таблицы, трекеры и когорты. Для сложных отчётов есть кастомные страницы через UnfoldModelAdminViewMixin.

Какие сторонние пакеты совместимы с django-unfold?

Из коробки: django-import-export, django-guardian, django-simple-history, django-constance, django-celery-beat, django-money, django-location-field, djangoql, django-json-widget, django-hijack, django-waffle. Остальные пакеты со своими шаблонами без адаптации выглядят как старая админка.

Какие версии Django и Python нужны для django-unfold?

Версия 0.105 требует Django 5.2+ и Python 3.12+. Поддержка Django 4.2, 5.0, 5.1 и Python 3.10, 3.11 снята в течение 2026 года, на старом стеке придётся закрепить более раннюю версию пакета.

Стоит ли переходить на Unfold с Jazzmin, Grappelli или django-admin-interface?

Да, если админкой пользуются не только разработчики и нужны дашборды, кастомные действия и современный UX. Jazzmin и Grappelli меняют в основном внешний вид, Unfold добавляет функциональность, но требует свежего Django и активно меняется от версии к версии.