Рассмотрим, как изменить внешний вид списка объектов модели в админ-панели. Отредактируйте файл admin.py
приложения блога и измените его следующим образом:
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
Таким образом административная панель Django понимает, что модель зарегистрирована с помощью пользовательского класса, наследуемого из ModelAdmin
. В него можно включить информацию о том, как отображать модель и как взаимодействовать с ней. Атрибут list_display
позволяет настроить поля модели, которые необходимо показывать на странице со списком объектов на сайте. Декоратор @admin.register()
выполняет ту же функцию, что и замененная admin.site.register()
, регистрируя класс ModeAdmin
, который он же и декорирует.
Отредактируем административную панель с помощью следующих настроек:
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status')
list_filter = ('status', 'created', 'publish', 'author')
search_fields = ('title', 'body')
prepopulated_fields = {'slug': ('title',)}
raw_id_fields = ('author',)
date_hierarchy = 'publish'
ordering = ('status', 'publish')
Вернемся в браузер и перезагрузим страницу. Теперь она будет выглядеть вот так:
Можно увидеть, что поля, отображаемые на странице со списком постов — это те, что были определены в атрибуте list_display
. Она включает правый сайдбар, с помощью которого можно фильтровать результаты по полям, которые указаны в атрибуте list_filter
. На странице появилось и поле поиска. Это потому что был определен список полей, по которым можно осуществлять поиск с помощью search_fields
. Под ним есть навигационные ссылки для просмотра разных дат. Также посты упорядочены по умолчанию согласно данным в колонках «Status» (Статус) или «Publish» (Опубликовано). Порядок по умолчанию задан с помощью атрибута ordering
.
Теперь кликните по кнопке «Add Post» (Добавить пост). Здесь тоже есть кое-какие изменения. При вводе названия нового поста поле slug
будет заполняться автоматически. Django использует для этого атрибут prepopulated_fields
и данные из поля title
. Также поле author
теперь отображается с виджетом поиска, который с большим объемом данных работает лучше чем выпадающее меню.
Всего парой строк кода удалось изменить способ отображения модели в административной панели. Есть еще много способов изменения внешнего вида и расширения возможностей списка объектов модели в админ-панели Django.