РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
608 of 818 menu

Атрибут actions

Атрибут actions класса ModelAdmin позволяет определять пользовательские действия, которые могут быть выполнены над выбранными объектами на странице списка в административной панели Django. Действия отображаются в выпадающем списке над таблицей с объектами и применяются к отмеченным записям.

Каждое действие представляет собой функцию, которая принимает три параметра: modeladmin - текущий экземпляр ModelAdmin, request - объект HTTP-запроса и queryset - набор выбранных объектов. Функция должна возвращать None или объект ответа.

Синтаксис

from django.contrib import admin from .models import Article @admin.action(description="Описание действия") def action_function(modeladmin, request, queryset): # Логика действия pass @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): actions = [action_function]

Пример

Давайте создадим действие, которое публикует выбранные статьи:

from django.contrib import admin from .models import Article @admin.action(description="Опубликовать выбранные статьи") def make_published(modeladmin, request, queryset): queryset.update(status="published") @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ["title", "status"] actions = [make_published]

После выбора нескольких статей и выполнения действия, их статус будет изменен на "published". Количество обновленных записей можно вывести пользователю:

from django.contrib import admin from .models import Article @admin.action(description="Опубликовать выбранные статьи") def make_published(modeladmin, request, queryset): updated = queryset.update(status="published") modeladmin.message_user(request, f"Опубликовано {updated} статей") @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ["title", "status"] actions = [make_published]

Результат выполнения кода:

"Опубликовано 5 статей"

Пример

Действие может выполнять более сложные операции, например, удалять объекты с отправкой уведомления:

from django.contrib import admin from django.shortcuts import redirect from django.contrib import messages from .models import Article @admin.action(description="Удалить выбранные статьи с уведомлением") def delete_with_notification(modeladmin, request, queryset): count = queryset.count() queryset.delete() modeladmin.message_user( request, f"Удалено {count} статей", messages.WARNING ) @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ["title", "author"] actions = [delete_with_notification]

Пример

Действия могут выполняться с доступом к данным запроса, например, для обработки файлов или дополнительных параметров:

from django.contrib import admin from django.http import HttpResponse import csv from .models import Article @admin.action(description="Экспортировать выбранные статьи в CSV") def export_as_csv(modeladmin, request, queryset): response = HttpResponse(content_type="text/csv") response["Content-Disposition"] = "attachment; filename=articles.csv" writer = csv.writer(response) writer.writerow(["ID", "Title", "Status", "Created At"]) for article in queryset: writer.writerow([ article.id, article.title, article.status, article.created_at ]) return response @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ["title", "status", "created_at"] actions = [export_as_csv]

Смотрите также

  • декоратор admin.action,
    который добавляет описание действия
  • атрибут list_display,
    который определяет отображаемые поля в списке объектов
  • атрибут list_filter,
    который добавляет фильтры на страницу списка
  • атрибут search_fields,
    который определяет поля для поиска
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить