Информационные страницы
AdminInformationPage — это AdminPage, которая рисует секции, алерты,
badge, действия шапки и timeline. По-прежнему нужен один контракт
доступа: наследуйте PermissionAdminPage, PersonalAdminPage или
SuperuserAdminPage и AdminInformationPage (в MRO контракт доступа
первым, если оба определяют has_view_permission).
Шаблон: admin/chassis/information_page.html (наследует
admin/chassis/page.html).
Анатомия страницы
┌─ breadcrumbs ─────────────────────────────────────────────┐
│ Dashboard › раздел › label страницы │
├─ действия шапки (`chassis_page_actions`) ─────────────────┤
│ кнопки AdminPageActionDTO │
├─ алерты ──────────────────────────────────────────────────┤
│ полоса AdminPageAlertDTO │
├─ CSS-сетка секций (четыре колонки) ───────────────────────┤
│ ┌ заголовок секции [header_action] ──────────────────┐ │
│ │ строка: иконка label value badges [действие] │ │
│ │ … или timeline вместо строк │ │
│ └────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
view() всегда вызывает:
self.render(
request=request,
information_sections=self.get_information_sections(request=request),
chassis_page_actions=self.get_page_actions(request=request),
chassis_page_alerts=self.get_page_alerts(request=request),
)
Реализуйте get_information_sections. Остальные два хука по умолчанию
возвращают [].
Хуки
| Метод | Возврат | Обязателен |
|---|---|---|
get_information_sections(request) | list[AdminInformationSectionDTO] | да |
get_page_actions(request) | list[AdminPageActionDTO] | нет |
get_page_alerts(request) | list[AdminPageAlertDTO] | нет |
DTO
AdminInformationSectionDTO
Блок на сетке из четырёх колонок.
| Поле | Тип | По умолчанию | Назначение |
|---|---|---|---|
title | локализованная строка | обязательно | заголовок секции |
rows | list[AdminInformationRowDTO] | обязательно | строки label/value |
column_span | int | 4 | ширина в колонках (1–4) |
column_start | int или None | None | необязательный старт в сетке |
row_span | int | 1 | вертикальный span |
timeline | AdminTimelineDTO или None | None | вместо строк, если задан |
header_action | AdminPageActionDTO или None | None | кнопка в шапке секции |
AdminInformationRowDTO
| Поле | Тип | По умолчанию |
|---|---|---|
label | локализованная строка | обязательно |
value | любое или None | обязательно |
action | AdminPageActionDTO или None | None |
badges | tuple[AdminInformationBadgeDTO, ...] | () |
icon_class | класс Font Awesome | '' |
icon_color | ButtonColor или None | None |
icon_label | локализованная строка | '' |
AdminInformationBadgeDTO
| Поле | Тип |
|---|---|
label | локализованная строка |
color | ButtonColor |
AdminPageAlertDTO
| Поле | Тип | По умолчанию |
|---|---|---|
message | локализованная строка | обязательно |
color | ButtonColor | обязательно |
icon_class | класс Font Awesome | '' |
AdminPageActionDTO
Используется в тулбаре страницы, шапках секций и строках.
| Поле | Тип | По умолчанию |
|---|---|---|
label | локализованная строка | обязательно |
url | str | обязательно |
color | ButtonColor | обязательно |
icon_class | класс Font Awesome | '' |
show_label | bool | False |
Семейство timeline
| DTO | Поля |
|---|---|
AdminTimelineDTO | groups: list[AdminTimelineGroupDTO], empty_text |
AdminTimelineGroupDTO | date_label, items: list[AdminTimelineItemDTO] |
AdminTimelineItemDTO | occurred_at: datetime, title, subtitle, result_color: ButtonColor | None |
Типичная страница
from django_chassis.dto import (
AdminInformationBadgeDTO,
AdminInformationRowDTO,
AdminInformationSectionDTO,
AdminPageActionDTO,
AdminPageAlertDTO,
)
from django_chassis.enums import ButtonColor
from django_chassis.views import AdminInformationPage, PermissionAdminPage
class InventoryPage(PermissionAdminPage, AdminInformationPage):
slug = 'inventory'
title = 'Склад'
label = 'Склад'
permission = view_inventory
def get_page_alerts(self, request):
return [
AdminPageAlertDTO(
message='Два импорта ждут проверки.',
color=ButtonColor.WARNING,
icon_class='fa-solid fa-triangle-exclamation',
)
]
def get_page_actions(self, request):
return [
AdminPageActionDTO(
label='Открыть книги',
url='/admin/catalog/book/',
color=ButtonColor.PRIMARY,
icon_class='fa-solid fa-book',
show_label=True,
)
]
def get_information_sections(self, request):
return [
AdminInformationSectionDTO(
title='Обзор',
column_span=2,
rows=[
AdminInformationRowDTO(
label='Книги',
value='128',
badges=(AdminInformationBadgeDTO(label='live', color=ButtonColor.SUCCESS),),
),
AdminInformationRowDTO(label='Авторы', value='34'),
],
)
]
TableOption можно положить рядом с секциями, если на кастомном view()
нужен табличный блок. Таблицы связанных сущностей на change form
ModelAdmin — другая option: Связанные сущности.