Адаптация внешнего вида моделей под конкретно-прикладную задачу
Теперь давайте посмотрим на способы адаптации сайта администрирования под конкретно-прикладную задачу.
Отредактируйте файл admin.py приложения blog, изменив его, как показано ниже:
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'slug', 'author', 'publish', 'status']
Мы сообщаем сайту администрирования, что модель зарегистрирована на сайте с использованием конкретно-прикладного класса, который наследует от ModelAdmin. В этот класс можно вставлять информацию о том, как показывать модель на сайте и как с ней взаимодействовать.
Атрибут list_display позволяет задавать поля модели, которые вы хотите показывать на странице списка объектов администрирования.
Декоратор @admin.register() выполняет ту же функцию, что и функция admin.site.register(), которую вы заменили, регистрируя декорируемый им класс ModelAdmin.
Давайте адаптируем модель admin, внеся в нее еще несколько опций.
Отредактируйте файл admin.py приложения blog, изменив его, как показано ниже:
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']
autocomplete_fields = ['author']
date_hierarchy = 'publish'
ordering = ['status', 'publish']
Вернитесь в свой браузер и перезагрузите страницу списка постов. Теперь она будет выглядеть примерно так:
Вы видите, что отображаемые на странице списка постов поля соответствуют тем, которые мы указали в атрибуте list_display.
Теперь страница списка содержит правую боковую панель, которая позволяет фильтровать результаты по полям, включенным в атрибут list_filter.
На странице появилась строка поиска. Это вызвано тем, что мы определили список полей, по которым можно выполнять поиск, используя атрибут search_fields.
Чуть ниже строки поиска находятся навигационные ссылки для навигации по иерархии дат, это определено атрибутом date_hierarchy.
Вы также видите, что по умолчанию посты упорядочены по столбцам STATUS(Статус) и PUBLISH(Опубликован). С помощью атрибута ordering были заданы критерии сортировки, которые будут использоваться по умолчанию.
Далее кликните по ссылке ADD POST(Добавить пост). Здесь вы тоже заметите некоторые изменения. При вводе заголовка нового поста поле slug заполняется автоматически.
Вы сообщили Django, что нужно предзаполнять поле slug данными, вводимыми в поле title, используя атрибут prepopulated_fields:
Кроме того, теперь поле author отображается поисковым виджетом, который будет более приемлемым, чем выбор из выпадающего списка, когда у вас тысячи пользователей.
Это достигается с помощью атрибута raw_id_fields и выглядит следующим образом:
Всего несколькими строками исходного кода мы адаптировали отображение модели на сайте администрирования.
Более подробная информация о сайте администрирования находится на странице https://docs.djangoproject.com/en/5.0/ref/contrib/admin/