Для отображения нескольких моделей на одной странице админки в 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 %}
Теперь вы можете отобразить несколько моделей на одной странице вещи, которые вам необходимы.
У каждого из этих подходов есть свои особенности и ограничения, и лучший подход зависит от ваших конкретных потребностей и требований проекта.