Перейти к основному содержимому

Как это работает

Добавлено в 1.0.1

Chassis — тонкий слой сборки над Django Admin. Вы объявляете возможности. Сервисы превращают их в URL, контекст шаблонов и проверки прав. Шаблоны и статика рисуют результат.

Два миксина

Публичные точки входа — ChassisAdminSiteMixin и ChassisAdminMixin.

ChassisAdminSiteMixin + AdminSite
├── dashboard_component_classes / dashboard_blocks → DashboardService
├── navbar_button_classes / user_menu_item_classes → AdminNavbarService
├── chassis_page_classes → AdminPageService
├── sidebar_items → AdminSidebarService
└── оборачивает сторонние ModelAdmin в ChassisAdminMixin

ChassisAdminMixin + ModelAdmin
└── options: list[AdminOption]
├── SearchOption, FiltersOption, DateHierarchyOption, tabs
├── RowActionsOption, ListActionsOption, ObjectActionsOption
├── RelatedEntitiesOption
└── ImportOption, ExportOption

Оба миксина должны стоять перед классом Django в MRO, чтобы хуки могли обернуть super().

Внутренняя композиция ModelAdmin

django_chassis.mixins.admin остаётся публичным модулем ChassisAdminMixin. Его реализация собирается из специализированных классов в django_chassis.mixins.core:

  • AdminCoreMixin — общие options и типизированный доступ к следующему ModelAdmin
  • AdminPermissionsMixin и AdminAuditMixin — доступ и аудит CRUD-действий
  • AdminChangeListMixin и AdminObjectPageMixin — список и страница объекта
  • AdminActionsMixin и AdminImportExportMixin — действия и потоки данных
  • AdminPresentationMixin — динамические поля, колонки и виджеты

Эти классы являются деталями реализации. Приложения продолжают наследовать только ChassisAdminMixin; его публичные пути импорта и позиция в MRO приложения не меняются.

Менеджеры моделей

Django-классы Manager и QuerySet находятся в django_chassis.models.managers. Модули моделей содержат объявления моделей и подключают импортированный менеджер, но не объявляют инфраструктуру запросов внутри модели.

Frozen options

ModelAdmin не наследует десяток миксинов ради поиска, badges и export. Он добавляет frozen dataclass в options. ChassisAdminMixin находит каждый тип, прокидывает его в атрибуты Django Admin (search_fields, list_filter, …) и отдаёт остальное шаблонам.

Отсутствующие типы берутся из значения по умолчанию миксина. Сейчас это RowActionsOption() — кнопка просмотра на каждом changelist.

Settings — не AdminOption. Это отдельный dataclass на chassis_settings для свёрнутых fieldset и стандартной кнопки add.

Сервисы

Работа уровня сайта не живёт во views. Сайт создаёт сервисы:

СервисОтветственность
DashboardServiceРеестр компонентов, проверка раскладки, SSR-контекст, live JSON
AdminNavbarServiceТема, свои кнопки, группы страниц, user menu
AdminPageServiceМаршруты страниц и группы navbar/dashboard
AdminSidebarServiceСсылки на модели/страницы, права, активное состояние

Класс сервиса можно заменить на сайте (dashboard_service_class, …) или переопределить get_*_service().

Путь запроса

  1. Django направляет запрос на Chassis AdminSite.
  2. each_context кладёт бренд, sidebar, navbar и footer в каждый шаблон Admin.
  3. Индекс (/): DashboardService раскладывает dashboard_blocks по slug компонентов и рендерит admin/chassis/dashboard/index.html. Live-виджеты опрашивают dashboard/live/ с If-None-Match.
  4. Changelist: ChassisAdminMixin.changelist_view читает options, собирает вкладки / поиск / фильтры / list actions и рендерит admin/chassis/change_list.html.
  5. Change form: changeform_view добавляет кнопки объектных действий и таблицы связанных сущностей (admin/chassis/change_form.html).
  6. Своя страница: AdminPage.dispatch проверяет контракт доступа, затем view() / render().
  7. Объектное действие / import / export: дополнительные URL из ChassisAdminMixin.get_urls().

Отсутствующий тип option — не ошибка. Mixin берёт class-level значение (RowActionsOption()) или не рисует этот chrome (нет fieldset поиска без SearchOption).

Шаблоны

'django_chassis' должен стоять перед 'django.contrib.admin' в INSTALLED_APPS. Chassis поставляет полный overlay шаблонов Admin и параллельное семейство admin/tabler/. Доменным приложениям не нужно копировать эти шаблоны.

См. Тема.

Чего Chassis не делает

  • Не владеет вашими моделями.
  • Не заменяет права Django; он их проверяет.
  • Не придумывает новую схему URL admin. Свои страницы и действия dashboard — дополнительные маршруты на том же AdminSite.

См. также