Хорошим способом расширить функциональность административной панели 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), которое выполнит необходимые действия и вернет результат пользователю.