Как настроить отображение модели в админ-панели 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: Дает возможность редактировать связанные модели на той же странице (например, комментарии к статье).

Ответ 18+ 🔞

О, смотри-ка, какой приятный сюрприз — очередной кусок документации по админке Django. Ну что ж, давайте разберём эту магию, чтобы даже последний пид... то есть, разработчик, понял, как тут всё устроено.

Представь, что твоя модель в админке выглядит как голый зад на морозе — всё видно, но неудобно и холодно. Чтобы это исправить, нужен специальный костюмчик, а именно — класс, который наследуется от admin.ModelAdmin. Это как твой личный стилист для админ-интерфейса.

Регистрируется этот красавец через декоратор @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 = 'Опубликовано?'

А теперь разберём по косточкам, что тут за хуйня творится:

  • list_display: Это как витрина в магазине. Перечисляешь тут поля — и они красуются столбиками в общем списке статей. Можно даже свои методы пихать, как is_published выше.
  • list_filter: Добавляет на боковую панель удобные фильтры-кнопочки. Кликнул — и вот тебе только черновики или статьи определённого автора. Волшебство, ёпта!
  • search_fields: Включает поисковую строку. Пользователь вбивает что-то — а система шерстит по указанным полям. Если не добавить — искать будет только глазами, удачи.
  • prepopulated_fields: Ленивое, но гениальное изобретение. Говоришь: «Слушай, Django, вот поле slug — сделай его на основе title». И он делает! Автоматом, пока ты печатаешь заголовок. Красота.
  • readonly_fields: Сюда засовываешь поля, которые нельзя редактировать. Например, даты создания и обновления. Чтобы какой-нибудь умник не решил, что статья из будущего.
  • Кастомные методы (типа is_published): Это твоё личное оружие. Хочешь красивую галочку вместо текста 'published'? Пожалуйста! Главное — не забудь про .boolean = True и .short_description, а то админка не поймёт, что от неё хотят.

Вот и вся наука. Ничего сложного, но без этого админка — просто голая форма для ввода данных. А с этим — мощный инструмент, где всё под рукой. Главное — не переусердствовать, а то можно так закастомизировать, что сам потом не разберёшься.