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