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

Объектные действия

Добавлено в 1.0.1

Объектные действия — методы ModelAdmin, которые работают с одним объектом. Регистрируйте их через @object_action и перечисляйте имена в ObjectActionsOption.

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 ObjectActionsOption


class BookAdmin(ChassisAdminMixin, ModelAdmin):
options = [ObjectActionsOption(actions=['publish'])]

@object_action(
description=_('Publish'), permission='change', confirmation=_('Publish this book?'), color=ButtonColor.SUCCESS
)
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,
condition=None,
condition_method=None,
)
ПараметрНазначение
descriptionПодпись кнопки (допустимы lazy-строки)
permissionview / add / change / delete или свой codename
confirmationЕсли задано, Chassis показывает форму подтверждения до вызова метода
colorButtonColor
conditioncallable(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', 'archive'])

Наружу выходят только перечисленные имена. Недекорированный метод в списке ломает конфигурацию.

Подтверждение

Если задан confirmation, Chassis рендерит admin/chassis/confirmed_action.html с ConfirmedActionForm. Метод вызывается только после POST-подтверждения.

См. также