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

ModelAdmin

Добавлено в 1.0.1

ChassisAdminMixin — точка входа ModelAdmin. Ставьте его первым в MRO. Возможности подключаются через options.

from django.contrib.admin import ModelAdmin

from django_chassis.mixins import ChassisAdminMixin
from django_chassis.options import RowActionsOption, SearchOption, Settings


class BookAdmin(ChassisAdminMixin, ModelAdmin):
chassis_settings = Settings(search_collapsed=True, allow_standard_add=True)
options = [SearchOption(fields=['title']), RowActionsOption()]

MRO​

class BookAdmin(ChassisAdminMixin, ModelAdmin): # correct
...


class BookAdmin(ModelAdmin, ChassisAdminMixin): # wrong — hooks will not wrap super()
...

То же правило для ReadOnlyAdminMixin и NoDeleteAdminMixin: они должны стоять так, чтобы их переопределения has_*_permission всё равно вызывались.

Анатомия change form​

Изменено в 1.0.7

Передайте _return_url в query string формы изменения, если кнопка «Назад» должна вернуть на другую внутреннюю страницу. Chassis принимает относительные и same-host URL, отклоняет внешние хосты и игнорирует возврат на ту же форму.

Шаблон: admin/chassis/change_form.html (наследует admin/change_form.html).

┌─ breadcrumbs ─────────────────────────────────────────────┐
│ Dashboard › раздел › модель › объект │
├─ тулбар (`page_actions`) ─────────────────────────────────┤
│ [кнопки @object_action…] [история Django / …] │
├─ fieldsets / inlines Django ──────────────────────────────┤
│ Pretty JSON / decimal / маски дат │
│ input RelatedCollectionsOption с добавлением/удалением │
├─ связанные сущности (`after_field_sets`) ─────────────────┤
│ по одному fieldset на RelatedEntityOption │
├─ submit row ──────────────────────────────────────────────┤
│ [Сохранить] [Назад] [Удалить] │
└───────────────────────────────────────────────────────────┘

Submit row использует общую панель действий с выравниванием вправо и кнопку «Назад». Обязательные поля получают единый красный маркер, а обязательные checkbox подтверждения — полноширинную подпись и выводятся после остальных полей. Сводка ошибок валидации показывается над формой в общем danger alert.

Объектные действия требуют ObjectActionsOption и @object_action на методах. Связанные таблицы — RelatedEntitiesOption. См. Объектные действия и Связанные сущности.

Первая колонка changelist по умолчанию не ссылка. На эту страницу попадают через row action (RowActionType.VIEW или CHANGE).

Как резолвит get_chassis_option​

  1. Идёт по self.options и возвращает первый экземпляр запрошенного типа.
  2. Если нет — по ChassisAdminMixin.options (сейчас: RowActionsOption() по умолчанию).
  3. Составные вещи (несколько FK-групп, несколько row actions) живут внутри одного option.

Два SearchOption не сливаются. Локальный побеждает.

options​

options — список frozen dataclass. Не переименовывайте этот атрибут.

Полные таблицы полей, валидация и регионы UI: каталог options.

AdminOption — объединение:

  • SearchOption
  • FiltersOption
  • DateHierarchyOption
  • FieldTabsOption
  • ForeignKeyTabsOption
  • BadgeFieldsOption
  • CopyableFieldsOption
  • DecimalAmountOption
  • RelatedFieldsOption
  • RelatedCollectionsOption
  • PrettyJsonOption
  • RowActionsOption
  • ListActionsOption
  • ObjectActionsOption
  • RelatedEntitiesOption
  • ImportOption
  • ExportOption

Значение по умолчанию миксина — [RowActionsOption()]. Если задаёте options сами, включите RowActionsOption, когда нужны кнопки в последней колонке.

Settings​

Не option. Задаётся на chassis_settings.

ПараметрПо умолчаниюНазначение
search_collapsedTrueНачинать со свёрнутого fieldset поиска
date_hierarchy_collapsedTrueСвернуть fieldset date hierarchy
filters_collapsedTrueСвернуть fieldset фильтров
allow_standard_addTrueПри False has_add_permission() возвращает False

Другие атрибуты миксина​

АтрибутПо умолчаниюНазначение
change_list_templateadmin/chassis/change_list.htmlChangelist Chassis
change_form_templateadmin/chassis/change_form.htmlФорма изменения Chassis
chassis_link_first_columnFalseПервая колонка не ссылка на change

Row actions — основной вход в объект. Ставьте chassis_link_first_column = True только если нужна классическая ссылка Django в первой колонке.

Сопутствующие миксины​

  • ReadOnlyAdminMixin — запрещает add, change и delete
  • NoDeleteAdminMixin — запрещает delete

Ставьте deny-миксин перед ChassisAdminMixin, чтобы его has_*_permission выиграли в MRO:

class LogAdmin(ReadOnlyAdminMixin, ChassisAdminMixin, ModelAdmin):
options = [SearchOption(fields=['message'])]

System checks​

ChassisAdminMixin проверяет права действий и lookup export. Ошибки видны как system checks Django, а не как тихие дыры в шаблонах.

См. также​