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

Changelist

Добавлено в 1.0.1

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 (снизу) │
│ Пагинация │
└───────────────────────────────────────────────────────────┘
РегионЧем задаётсяЗаметки
BreadcrumbsAdminSidebarServiceМетка раздела только если модель в sidebar_items
List actionsListActionsOptionИменованные URL; могут быть disabled
Import / ExportImportOption / 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_displayBadge / decimal / JSON поля переписываются
Последняя колонкаRowActionsOptionПо умолчанию: иконка просмотра

chassis_link_first_column = False (значение миксина) — первая колонка обычный текст. Вход в объект — row action.

Как применяются options

В ChassisAdminMixin.__init__:

  1. SearchOption.fields пишется в instance search_fields.
  2. DateHierarchyOption.field пишется в instance date_hierarchy.
  3. Генерируются display-методы badge, pretty-JSON и decimal.
  4. Имена condition_method у list actions проверяются как @classmethod.

В changelist_view:

  1. Вкладки и FK-группы попадают в контекст (tabs, tab_groups, field_tab_display).
  2. Заголовки и флаги свёртки поиска / фильтров / дат — тоже в контекст.
  3. _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')
ПараметрТипПо умолчанию
fieldslist[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')
ПараметрТипПо умолчанию
fieldDateField / 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)обязательно
displayTabDisplay.BUTTONS или SELECTBUTTONS
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.

См. также