Декоратор admin.action
Декоратор admin.action применяется к функциям, которые определяют пользовательские действия для административной панели Django. Действия отображаются в выпадающем списке на странице списка объектов модели и позволяют выполнять операции над выбранными записями. Декоратор принимает параметр description, который задает текст действия в интерфейсе администратора. Функция действия принимает три аргумента: modeladmin - экземпляр класса администратора, request - объект HTTP-запроса и queryset - набор выбранных объектов.
Синтаксис
from django.contrib import admin
@admin.action(description="Description text")
def action_name(modeladmin, request, queryset):
# Perform action on queryset
queryset.update(field=value)
Пример
Создадим действие для массовой публикации статей. Действие будет изменять статус выбранных статей на "published":
from django.contrib import admin
from myapp.models import Article
@admin.action(description="Publish selected articles")
def publish_articles(modeladmin, request, queryset):
updated = queryset.update(status="published")
modeladmin.message_user(
request,
f"{updated} articles were successfully published."
)
Результат выполнения действия:
"5 articles were successfully published."
Пример
Добавим действие для архивации выбранных пользователей. Также укажем параметр permissions для ограничения доступа к действию:
from django.contrib import admin
from myapp.models import User
@admin.action(
description="Archive selected users",
permissions=["change"],
)
def archive_users(modeladmin, request, queryset):
updated = queryset.update(is_active=False)
modeladmin.message_user(
request,
f"{updated} users were archived.",
level="WARNING",
)
Результат выполнения кода:
"3 users were archived."
Пример
Регистрация действия в классе ModelAdmin с использованием атрибута actions:
from django.contrib import admin
from myapp.models import Article
@admin.action(description="Publish selected articles")
def publish_articles(modeladmin, request, queryset):
updated = queryset.update(status="published")
modeladmin.message_user(
request,
f"{updated} articles published."
)
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ["title", "status", "created_at"]
actions = [publish_articles]
Смотрите также
-
декоратор
admin.register,
который регистрирует модель в административной панели -
атрибут
actions,
который определяет список доступных действий для модели -
класс
ModelAdmin,
который настраивает отображение модели в административной панели -
декоратор
admin.display,
который настраивает отображение полей в списке объектов