Как можно расширить функциональность административной панели в Django?

Как добавить функционал в админку для выбора определенного количества элементов из модели Model, на основе случайного выбора, с дополнением данных из модели User и сохранением в формате xlsx? Необходимо реализовать это в рамках админки или необходимо создать отдельное представление (view)?
  • 27 сентября 2023 г. 21:07
Ответы на вопрос 1
Хорошим способом расширить функциональность административной панели Django является создание собственного класса модели (ModelAdmin) в файле admin.py для вашей модели Model. В этом классе вы можете определить дополнительные методы и поля, которые хотите добавить.

Вам придется создать отдельное представление (view) и URL-шаблон для реализации данной функциональности, так как случайный выбор, дополнение данных из модели User и сохранение в формате xlsx являются действиями, которые не могут быть выполнены в рамках стандартной административной панели Django.

Вот пример шагов, которые вам потребуются:

1. В файле admin.py определите класс модели (ModelAdmin) для вашей модели Model:
   
   ```python
   from django.contrib import admin

   class ModelAdmin(admin.ModelAdmin):
       def get_urls(self):
           from django.urls import path
           from . import views

           urlpatterns = [
               path('random_data/', views.random_data_view, name='random_data'),
           ]

           return urlpatterns

       def random_data_link(self, obj):
           return '<a href="%s">Выбрать рандомные данные</a>' % reverse('admin:random_data')
       random_data_link.allow_tags = True
       random_data_link.short_description = 'Действие'
   ```
2. Создайте файл views.py и определите функцию представления (view) для вашего представления:

   ```python
   from django.shortcuts import render
   from django.contrib.auth.models import User

   def random_data_view(request):
       selected_data = Model.objects.order_by('?')[:10]  # выбрать 10 случайных записей
       # выполнить дополнение данных
       # сохранить в формате xlsx
       # вернуть рендеринг страницы или ответ с xlsx файлом
   ```
3. Добавьте URL-шаблон для вашего представления в файл urls.py вашего Django приложения:

   ```python
   from django.urls import path

   urlpatterns = [
       # другие URL-шаблоны админки,
       path('admin/', admin.site.urls),
   ]
   ```

Теперь вы можете перейти на страницу администратора вашего сайта (например, http://localhost:8000/admin), и у вашей модели Model будет ссылка на выполнение выборки случайных данных. При нажатии на эту ссылку будет открыто представление (view), которое выполнит необходимые действия и вернет результат пользователю.
Похожие вопросы