Skip to main content

Changelist

Added in 1.0.1

The changelist is the ModelAdmin list page. Chassis keeps Django's result table and bulk actions, then rebuilds the chrome around them: breadcrumbs, toolbar, tabs, search, date hierarchy, and filters all sit in Chassis fieldsets.

Template: admin/chassis/change_list.html (extends admin/change_list.html). Stock {% block filters %}, {% block search %}, and {% block date_hierarchy %} are emptied so those controls are not rendered twice.

Every field below is documented in the Options catalog. This page explains how the page is assembled.

Page anatomy

┌─ breadcrumbs ─────────────────────────────────────────────┐
│ Dashboard › Sidebar section › Model verbose name │
├─ toolbar (`page_actions` / `object-tools`) ───────────────┤
│ [list actions…] [Import] [Export] [+ Add] │
├─ controls stack (`chassis-changelist-controls`) ──────────┤
│ Tabs fieldset FieldTabs / ForeignKeyTabs │
│ Search fieldset SearchOption │
│ Dates fieldset DateHierarchyOption │
│ Filters fieldset FiltersOption │
├─ results fieldset ────────────────────────────────────────┤
│ Django bulk actions (top) │
│ Result table: list_display + last-column row actions │
│ Django bulk actions (bottom) │
│ Pagination │
└───────────────────────────────────────────────────────────┘
RegionDriven byNotes
BreadcrumbsAdminSidebarServiceSection label only if the model is in sidebar_items
List actionsListActionsOptionNamed URLs; may render disabled
Import / ExportImportOption / ExportOptionInjected as list actions
Addhas_add_permission + Settings.allow_standard_addHidden when either is false
Choice tabsFieldTabsOptionOne row of buttons or a select
FK tabsForeignKeyTabsOptionOne group per ForeignKeyTabGroupOption
SearchSearchOptionCollapsed via Settings.search_collapsed
DatesDateHierarchyOptionCollapsed via Settings.date_hierarchy_collapsed
FiltersFiltersOptionCollapsed via Settings.filters_collapsed
Table columnsDjango list_displayBadge / decimal / JSON fields are rewritten
Last columnRowActionsOptionDefault: view icon

chassis_link_first_column = False (mixin default) means the first column is plain text. The intended entry point is a row action.

How options are applied

On ChassisAdminMixin.__init__:

  1. SearchOption.fields is written to instance search_fields.
  2. DateHierarchyOption.field is written to instance date_hierarchy.
  3. Badge, pretty-JSON, and decimal display methods are generated.
  4. List-action condition_method names are validated as @classmethod.

On changelist_view:

  1. Tabs and FK tab groups become context (tabs, tab_groups, field_tab_display).
  2. Search / filters / date hierarchy titles and collapsed flags go into context.
  3. _get_chassis_list_actions merges ListActionsOption with import/export buttons.

Query-string parameters of tabs, search, and filters are preserved when you follow Add or a row action.

from django_chassis.options import SearchOption

SearchOption(fields=['title', 'isbn'], fieldset_title='Search', placeholder='Title or ISBN')
ParameterTypeDefault
fieldslist[str]required — becomes search_fields
fieldset_titlelocalized stringSearch / Поиск
placeholderlocalized string''

Lookups are Django's: default icontains, ^ prefix, = exact, @ full text.

Filters

from django_chassis.options import FiltersOption

FiltersOption(fields=['status', 'author'], fieldset_title='Filters')

fields accepts the same values as Django list_filter (field names, related lookups, SimpleListFilter subclasses). The stock right-hand filter sidebar is not used.

Date hierarchy

from django_chassis.options import DateHierarchyOption

DateHierarchyOption(field='published_at')
ParameterTypeDefault
fieldmodel date/datetime fieldrequired
fieldset_titlelocalized stringDates / Даты

Field tabs

Choice-based tabs (or a select) that filter the changelist.

from django_chassis.enums import TabDisplay
from django_chassis.options import FieldTabsOption

FieldTabsOption(field='status', choices=Book.Status.choices, display=TabDisplay.BUTTONS, all_label='All')
ParameterTypeDefault
fieldmodel field namerequired
choiceslist of (value, label)required
displayTabDisplay.BUTTONS or SELECTBUTTONS
all_labellocalized stringAll / Все
fieldset_titlelocalized stringTabs

Each tab is a GET link. "All" drops the query parameter.

Foreign-key tabs

One or more FK-based tab groups. Attach one ForeignKeyTabsOption and put every group in groups.

from django_chassis.options import ForeignKeyTabGroupOption, ForeignKeyTabsOption

ForeignKeyTabsOption(groups=[ForeignKeyTabGroupOption(field='author', model=Author, label='Authors')])

ForeignKeyTabsOption also accepts a single-group shortcut via field and model instead of groups. Full field tables: Options catalog.

Collapsed fieldsets

Settings.search_collapsed, filters_collapsed, and date_hierarchy_collapsed control the initial state. See ModelAdmin and Options catalog.

See also