Как обрабатывать нажатие собственной кнопки в админке Django?

Для обработки нажатия собственной кнопки в админке Django, вам потребуется выполнить несколько шагов.

Шаг 1: Создать действие в административной модели
Сначала вам нужно определить действие, которое будет выполняться при нажатии кнопки. Для этого навигируйтесь к вашей административной модели, которую вы хотите расширить, и определите свое действие. Например, если у вас есть модель MyModel, вам необходимо создать новый метод в ее административном классе:

from django.contrib import admin

class MyModelAdmin(admin.ModelAdmin):
    def my_custom_action(self, request, queryset):
        # Ваш код для обработки нажатия кнопки
        pass

    actions = ['my_custom_action']

Шаг 2: Определить URL-маршрут для обработки нажатия кнопки
Теперь вам нужно определить URL-маршрут, который будет обслуживать нажатие кнопки. Для этого создайте новый admin URL-маршрут в файле urls.py вашего Django-приложения:

from django.urls import path

from .views import my_custom_action_view

app_name = 'admin'

urlpatterns = [
    # Другие URL-маршруты админки Django здесь...
    path('my_model/my_custom_action/', my_custom_action_view, name='my_custom_action'),
]

Шаг 3: Определить представление для обработки нажатия кнопки
Теперь вам нужно определить представление (view), которое будет вызываться при нажатии кнопки. Создайте новое представление Django в файле views.py вашего Django-приложения:

from django.http import HttpResponse

def my_custom_action_view(request):
    # Ваш код для обработки нажатия кнопки
    return HttpResponse('Действие выполнено успешно.')

Шаг 4: Подключить представление в админке
Наконец, чтобы связать ваше действие с кнопкой в админке Django, вам нужно добавить ссылку на ваш URL-маршрут в шаблоне административного класса. В файле admin.py вашего Django-приложения:

from django.contrib import admin

class MyModelAdmin(admin.ModelAdmin):
    def my_custom_action(self, request, queryset):
        # Ваш код для обработки нажатия кнопки
        pass

    actions = ['my_custom_action']
    
    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path('my_custom_action/', self.admin_site.admin_view(my_custom_action_view), name='my_custom_action'),
        ]
        return my_urls + urls

Это все! Теперь, когда вы запустите ваше Django-приложение и зайдете в админку, вы увидите новую кнопку "My Custom Action" в списке доступных действий для MyModel. При нажатии на эту кнопку будет вызываться ваше представление my_custom_action_view, которое выполняет определенную вами логику.

Обратите внимание, что в представлении my_custom_action_view и методе my_custom_action есть возможность обратиться к объектам, выбранным в админке (например, их идентификаторам или другим полям), используя queryset. Это позволяет вам выполнять различные операции с выбранными объектами.

Также, не забудьте запустить миграции, если необходимо, чтобы изменения начали действовать.