Блог на Django #10: Настройка отображения модели

Рассмотрим, как изменить внешний вид списка объектов модели в админ-панели. Отредактируйте файл 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')

Вернемся в браузер и перезагрузим страницу. Теперь она будет выглядеть вот так:

Отредактированная админ-панель Django

Можно увидеть, что поля, отображаемые на странице со списком постов — это те, что были определены в атрибуте list_display. Она включает правый сайдбар, с помощью которого можно фильтровать результаты по полям, которые указаны в атрибуте list_filter. На странице появилось и поле поиска. Это потому что был определен список полей, по которым можно осуществлять поиск с помощью search_fields. Под ним есть навигационные ссылки для просмотра разных дат. Также посты упорядочены по умолчанию согласно данным в колонках «Status» (Статус) или «Publish» (Опубликовано). Порядок по умолчанию задан с помощью атрибута ordering.

Теперь кликните по кнопке «Add Post» (Добавить пост). Здесь тоже есть кое-какие изменения. При вводе названия нового поста поле slug будет заполняться автоматически. Django использует для этого атрибут prepopulated_fields и данные из поля title. Также поле author теперь отображается с виджетом поиска, который с большим объемом данных работает лучше чем выпадающее меню.

поле author с виджетом поиска

Всего парой строк кода удалось изменить способ отображения модели в административной панели. Есть еще много способов изменения внешнего вида и расширения возможностей списка объектов модели в админ-панели Django.