Changelist
Changelist — страница списка ModelAdmin. Chassis оставляет таблицу Django и массовые действия, а оболочку собирает заново: breadcrumbs, тулбар, вкладки, поиск, иерархия дат и фильтры живут в fieldset Chassis.
Шаблон: admin/chassis/change_list.html (наследует
admin/change_list.html). Стандартные {% block filters %},
{% block search %} и {% block date_hierarchy %} опустошены, чтобы
контролы не рисовались дважды.
Каждое поле ниже разобрано в каталоге options. Эта страница объясняет, как собирается страница.
Анатомия страницы
┌─ breadcrumbs ─────────────────────────────────────────────┐
│ Dashboard › раздел sidebar › verbose name модели │
├─ тулбар (`page_actions` / `object-tools`) ────────────────┤
│ [list actions…] [Import] [Export] [+ Добавить] │
├─ стек контролов (`chassis-changelist-controls`) ──────────┤
│ Fieldset вкладок FieldTabs / ForeignKeyTabs │
│ Fieldset поиска SearchOption │
│ Fieldset дат DateHierarchyOption │
│ Fieldset фильтров FiltersOption │
├─ fieldset результатов ────────────────────────────────────┤
│ Массовые действия Django (сверху) │
│ Таблица: list_display + row actions в последней колонке │
│ Массовые действия Django (снизу) │
│ Пагинация │
└───────────────────────────────────────────────────────────┘
| Регион | Чем задаётся | Заметки |
|---|---|---|
| Breadcrumbs | AdminSidebarService | Метка раздела только если модель в sidebar_items |
| List actions | ListActionsOption | Именованные URL; могут быть disabled |
| Import / Export | ImportOption / ExportOption | Подмешиваются как list actions |
| Добавить | has_add_permission + Settings.allow_standard_add | Скрыта, если любое из условий ложно |
| Choice-вкладки | FieldTabsOption | Ряд кнопок или select |
| FK-вкладки | ForeignKeyTabsOption | Одна группа на ForeignKeyTabGroupOption |
| Поиск | SearchOption | Свёртка: Settings.search_collapsed |
| Даты | DateHierarchyOption | Свёртка: Settings.date_hierarchy_collapsed |
| Фильтры | FiltersOption | Свёртка: Settings.filters_collapsed |
| Колонки таблицы | Django list_display | Badge / decimal / JSON поля переписываются |
| Последняя колонка | RowActionsOption | По умолчанию: иконка просмотра |
chassis_link_first_column = False (значение миксина) — первая колонка
обычный текст. Вход в объект — row action.
Как применяются options
В ChassisAdminMixin.__init__:
SearchOption.fieldsпишется в instancesearch_fields.DateHierarchyOption.fieldпишется в instancedate_hierarchy.- Генерируются display-методы badge, pretty-JSON и decimal.
- Имена
condition_methodу list actions проверяются как@classmethod.
В changelist_view:
- Вкладки и FK-группы попадают в контекст (
tabs,tab_groups,field_tab_display). - Заголовки и флаги свёртки поиска / фильтров / дат — тоже в контекст.
_get_chassis_list_actionsсмешиваетListActionsOptionс кнопками import/export.
Query-параметры вкладок, поиска и фильтров сохраняются при переходе на Add или row action.
Поиск
from django_chassis.options import SearchOption
SearchOption(fields=['title', 'isbn'], fieldset_title='Поиск', placeholder='Название или ISBN')
| Параметр | Тип | По умолчанию |
|---|---|---|
fields | list[str] | обязательно — становится search_fields |
fieldset_title | локализованная строка | Search / Поиск |
placeholder | локализованная строка | '' |
Lookup как в Django: по умолчанию icontains, префикс ^, точное =,
полнотекст @.
Фильтры
from django_chassis.options import FiltersOption
FiltersOption(fields=['status', 'author'], fieldset_title='Фильтры')
fields принимает те же значения, что Django list_filter (имена полей,
related lookup, подклассы SimpleListFilter). Правый sidebar фильтров
Django не используется.
Иерархия дат
from django_chassis.options import DateHierarchyOption
DateHierarchyOption(field='published_at')
| Параметр | Тип | По умолчанию |
|---|---|---|
field | DateField / DateTimeField модели | обязательно |
fieldset_title | локализованная строка | Dates / Даты |
Вкладки по полю
Вкладки (или select), которые фильтруют changelist по choices.
from django_chassis.enums import TabDisplay
from django_chassis.options import FieldTabsOption
FieldTabsOption(field='status', choices=Book.Status.choices, display=TabDisplay.BUTTONS, all_label='Все')
| Параметр | Тип | По умолчанию |
|---|---|---|
field | имя поля модели | обязательно |
choices | список (value, label) | обязательно |
display | TabDisplay.BUTTONS или SELECT | BUTTONS |
all_label | локализованная строка | All / Все |
fieldset_title | локализованная строка | Tabs |
Каждая вкладка — GET-ссылка. «Все» снимает query-параметр.
Вкладки по ForeignKey
Одна или несколько групп вкладок по FK. Вешайте один
ForeignKeyTabsOption и кладите группы в groups.
from django_chassis.options import ForeignKeyTabGroupOption, ForeignKeyTabsOption
ForeignKeyTabsOption(groups=[ForeignKeyTabGroupOption(field='author', model=Author, label='Авторы')])
ForeignKeyTabsOption также принимает shortcut одной группы через
field и model вместо groups. Полные таблицы полей:
каталог options.
Свёрнутые fieldset
Settings.search_collapsed, filters_collapsed и
date_hierarchy_collapsed задают начальное состояние. См.
ModelAdmin и каталог options.