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

Admin site

Добавлено в 1.0.1

ChassisAdminSiteMixin подключает возможности Chassis к Django AdminSite. Приложение-владелец экземпляра объявляет бренд, навигацию, страницы и раскладку dashboard.

Минимальный site

from django.contrib.admin import AdminSite
from django.utils.translation import gettext_lazy as _

from django_chassis.mixins import ChassisAdminSiteMixin


class CustomAdminSite(ChassisAdminSiteMixin, AdminSite):
chassis_brand_name = _('My project')
chassis_brand_logo_static_path = 'img/logo.png'


admin_site = CustomAdminSite(name='admin')

Подключайте admin_site.urls, а не admin.site.urls.

Таблицы полей site-level option (Sidebar*, AdminPageGroupOption, PermissionOption): каталог options.

Атрибуты сайта

АтрибутНазначение
chassis_brand_nameЗаголовок бренда в оболочке
chassis_brand_logo_static_pathStatic-путь к логотипу и favicon. По умолчанию admin/chassis/icon.svg
sidebar_itemsКортеж SidebarLinkOption / SidebarSectionOption
chassis_page_classesПодклассы AdminPage
chassis_permission_optionsДополнительные PermissionOption
dashboard_component_classesКлассы компонентов dashboard
dashboard_blocksРаскладка DashboardBlockDTO
navbar_button_classesДополнительные кнопки navbar
user_menu_item_classesДополнительные пункты user menu
show_recent_actionsПоказывать recent actions Django на индексе
include_users_moduleЗарегистрировать Users/Groups, сессии, попытки входа, журнал, страницы профиля
include_users_sidebarВставить стандартный раздел «Пользователи и группы»

Хуки сервисов

Переопределите, если нужна своя реализация сервиса:

  • get_dashboard_service()
  • get_navbar_service()
  • get_chassis_page_service()
  • get_sidebar_service()
  • get_chassis_brand() / get_chassis_brand_badge()
  • get_chassis_footer_context()

Миксин также подключает модуль пользователей, пока не задано include_users_module = False.

Сторонние ModelAdmin

Изменено в 1.0.2

Сайт оборачивает обычные сторонние ModelAdmin в ChassisAdminMixin, чтобы они получили шаблоны Chassis и row actions по умолчанию. Модели всё равно регистрируются на экземпляре Chassis site.

Сигнатура register() использует общий тип Django Model, поэтому приложения могут переопределять метод без предупреждений type checker о сужении override. ChassisAdminSiteMixin остаётся чистым runtime-миксином; проектный AdminSite идёт следующим классом в MRO и получает делегированные вызовы Django.

Шаблон индекса

index_template по умолчанию — admin/chassis/dashboard/index.html. Если компонентов dashboard нет, страница всё равно рисует оболочку Chassis.

Проверки при создании

Конструктор миксина:

  • регистрирует каждый PermissionOption из chassis_permission_options
  • требует, чтобы каждый класс страницы объявлял ровно один контракт доступа (PermissionAdminPage, PersonalAdminPage или SuperuserAdminPage)
  • отклоняет PersonalAdminPage, которые входят в группы navbar или dashboard
  • требует, чтобы PermissionAdminPage.permission было правом view_*

Ошибки поднимают ImproperlyConfigured при создании сайта, а не на первом запросе.

См. также