Как отобразить несколько моделей на одной странице админки?

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

1. Использование InlineModelAdmin: Для связей типа "один-ко-многим" или "многие-ко-многим" вы можете использовать InlineModelAdmin. Он позволяет встроить модель в редактирование родительской модели и отображать связанные объекты на той же странице.

Например, если у вас есть модели Author и Book, и каждая книга принадлежит автору, вы можете встроить Book в редактирование модели Author, чтобы отобразить редактирование книг на странице редактирования автора:

   from django.contrib import admin
   from .models import Author, Book
   
   class BookInline(admin.StackedInline):
       model = Book
   
   class AuthorAdmin(admin.ModelAdmin):
       inlines = [BookInline]
   
   admin.site.register(Author, AuthorAdmin)

Теперь при редактировании объекта Author вы увидите форму для добавления и редактирования связанных с ним книг.

2. Использование list_display: Для отображения информации из нескольких моделей на одной странице в списке объектов вы можете использовать list_display в классе ModelAdmin. list_display позволяет указать, какие поля моделей должны быть отображены в списке объектов.

Например, если у вас есть модели Author и Book, и каждая книга принадлежит автору, вы можете создать класс AuthorAdmin и указать, какие поля отображать в списке авторов:

   from django.contrib import admin
   from .models import Author, Book
   
   class AuthorAdmin(admin.ModelAdmin):
       list_display = ['name', 'email', 'get_books']
   
       def get_books(self, obj):
           return ",".join([book.title for book in obj.books.all()])
   
       get_books.short_description = 'Books'
   
   admin.site.register(Author, AuthorAdmin)

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

3. Использование специальной страницы админки: Если вы хотите отобразить более сложные данные или свойства, связанные с несколькими моделями на одной странице, вы можете создать собственную страницу админки и использовать шаблоны и представления Django для отображения данных.

Для этого вам нужно создать новый представление (view) в файле admin.py и настроить соответствующий шаблон.

   from django.contrib import admin
   from django.shortcuts import render
   from .models import Author, Book
   
   def custom_admin_view(request):
       authors = Author.objects.all()
       books = Book.objects.all()
   
       context = {
           'authors': authors,
           'books': books,
       }
   
       return render(request, 'admin/custom_admin.html', context)
   
   admin.site.register_view('custom_admin/', view=custom_admin_view)

Затем вам нужно создать соответствующий шаблон custom_admin.html, который может использовать данные authors и books. В этом шаблоне вы можете использовать Django-теги шаблонов для отображения данных в нужном формате.

   {% for author in authors %}
       {{ author.name }}
       {% for book in author.books.all %}
           - {{ book.title }}
       {% endfor %}
   {% endfor %}

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

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