Как настроить отображение модели в админ-панели Django

Ответ

Для кастомизации представления модели в стандартной админ-панели Django используется класс, наследующий admin.ModelAdmin. Это позволяет управлять отображаемыми полями, добавлять фильтрацию, поиск и другие элементы для улучшения UX администраторов.

Класс-настройщик регистрируется для конкретной модели с помощью декоратора @admin.register.

Пример:

from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    # Поля, которые будут отображаться в списке объектов
    list_display = ('title', 'author', 'status', 'created_at', 'is_published')

    # Поля, по которым можно будет фильтровать
    list_filter = ('status', 'created_at', 'author')

    # Поля, по которым будет работать поиск
    search_fields = ('title', 'content')

    # Автоматическое заполнение slug на основе title
    prepopulated_fields = {'slug': ('title',)}

    # Поля только для чтения на странице редактирования
    readonly_fields = ('created_at', 'updated_at')

    # Метод для вывода кастомного поля (в данном случае, булевой иконки)
    def is_published(self, obj):
        return obj.status == 'published'

    is_published.boolean = True
    is_published.short_description = 'Опубликовано?'

Ключевые атрибуты ModelAdmin:

  • list_display: Определяет столбцы в таблице списка объектов. Может включать поля модели и методы ModelAdmin.
  • list_filter: Добавляет боковую панель для фильтрации по указанным полям.
  • search_fields: Включает строку поиска, которая ищет по текстовым и реляционным полям.
  • fieldsets: Позволяет группировать поля на странице редактирования для лучшей организации.
  • inlines: Дает возможность редактировать связанные модели на той же странице (например, комментарии к статье).