Ответ
Для кастомизации представления модели в стандартной админ-панели 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, а то админка не поймёт, что от неё хотят.
Вот и вся наука. Ничего сложного, но без этого админка — просто голая форма для ввода данных. А с этим — мощный инструмент, где всё под рукой. Главное — не переусердствовать, а то можно так закастомизировать, что сам потом не разберёшься.