Объектные действия
Объектные действия — методы ModelAdmin, которые работают с одним объектом.
Регистрируйте их через @object_action и перечисляйте имена в
ObjectActionsOption.
Действие может содержать иконку из поставляемого Chassis набора Font Awesome.
Добавлено в 1.0.15Укажите opens_modal=True, чтобы загружать ответ действия через общий modal-
клиент Chassis. Действие сохраняет штатную компактную цветную кнопку, а его
href остаётся доступной fallback-ссылкой.
from django.contrib import messages
from django.http import HttpRequest, HttpResponseRedirect
from django.utils.translation import gettext_lazy as _
from django_chassis.decorators import object_action
from django_chassis.enums import ButtonColor
from django_chassis.mixins import ChassisAdminMixin
from django_chassis.options import ObjectActionsDropdownOption, ObjectActionsOption
class BookAdmin(ChassisAdminMixin, ModelAdmin):
options = [
ObjectActionsOption(
actions=['publish'],
dropdown=ObjectActionsDropdownOption(actions=['archive'])
)
]
@object_action(
description=_('Publish'),
permission='change',
confirmation=_('Publish this book?'),
color=ButtonColor.SUCCESS,
icon_class='fa-solid fa-bullhorn',
opens_modal=True
)
def publish(self, request: HttpRequest, obj: Book) -> HttpResponseRedirect | None:
obj.publish()
messages.success(request, _('Published.'))
return None
Декоратор
@object_action(
description,
*,
permission=None,
confirmation=None,
color=ButtonColor.PRIMARY,
icon_class=None,
opens_modal=False,
condition=None,
condition_method=None,
)
| Параметр | Назначение |
|---|---|
description | Подпись кнопки (допустимы lazy-строки) |
permission | view / add / change / delete или свой codename |
confirmation | Если задано, Chassis показывает форму подтверждения до вызова метода |
color | ButtonColor |
icon_class | Необязательные CSS-классы Font Awesome перед подписью |
opens_modal | Загрузить ответ действия в общем modal Chassis |
condition | callable(admin, request, obj) -> bool |
condition_method | Имя @classmethod, вызываемого как (request, obj) |
condition и condition_method взаимоисключающие.
Сигнатура метода — (self, request, obj). Верните HttpResponse, чтобы
перенаправить или отрисовать страницу, или None, чтобы остаться на
странице объекта.
Маршрут (ModelAdmin):
{admin}/{app}/{model}/{object_id}/actions/{action_name}/
Имя URL: {app}_{model}_object_action. Permission и condition проверяются
повторно на этом запросе, не только при отрисовке кнопки.
AdminObjectPage использует тот же декоратор на карточке без модели —
см. Свои страницы.
ObjectActionsOption
ObjectActionsOption(
actions=['publish'],
dropdown=ObjectActionsDropdownOption(actions=['archive'])
)
Наружу выходят только перечисленные имена. Недекорированный метод в списке ломает конфигурацию.
Добавлено в 1.0.7dropdown явно помещает перечисленные действия в основное меню
«Дополнительные действия». Имена должны быть уникальны одновременно в
actions и dropdown.actions; пустой dropdown недопустим. Независимо от явной
группировки Chassis автоматически сворачивает шесть и более видимых действий в
одно меню, а пять и меньше оставляет отдельными кнопками.
Подтверждение
Если задан confirmation, Chassis рендерит
admin/chassis/confirmed_action.html с ConfirmedActionForm. Метод
вызывается только после POST-подтверждения.
Шаблоны object actions, расширяющие
admin/object_actions/base_action_view.html, теперь используют общую оболочку
страницы Chassis и размещают содержимое в блоке object_action_content.
Оболочка предоставляет компактные стили форм, information table,
предупреждений и кнопок действий.
Страницы действий используют всю ширину контента. Нижняя панель выровнена
вправо и содержит общую кнопку «Назад»; ошибки валидации собраны в общем danger
alert, а обязательный checkbox подтверждения выводится после остальных полей.