Django Admin — управление статьями в бэкенде
В этой главе вы узнаете, как настроить Django Admin, чтобы получить бэкенд для управления контентом без написания какого-либо фронтенд-кода.
Что такое Admin?
Django AdminЭто одна из самых мощных встроенных возможностей Django: вы просто регистрируете модели, и она автоматически создаёт полноценную систему административного управления.
Админка предоставляет CRUD для статей, поиск, фильтрацию, пагинацию и другие функции, без необходимости писать какой-либо код CRUD самостоятельно.
Создание суперпользователя
Сначала вам нужно создать учетную запись администратора для админки:
(venv) $ python manage.py createsuperuser 用户名:admin 电子邮件地址:[email protected] Password: # 输入密码(不会回显) Password (again): # 重复密码 Superuser created successfully.
После запуска сервера перейдите по адресу http://127.0.0.1:8000/admin/ и войдите с учетной записью, которую вы создали.
(venv) $ python manage.py runserver
Регистрация моделей в Admin
Openblog/admin.py, зарегистрируйте модели Post и Category.
Пример
from django.contrib import admin
from .models import Category, Post
# Регистрация модели Category: самый простой способ регистрации
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
# Столбцы, отображаемые на странице списка
list_display = ['name', 'slug']
# Зарегистрировать модель статьи: с пользовательской конфигурацией
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
# Столбцы, отображаемые на странице списка
list_display = ['title', 'category', 'created_at', 'updated_at']
# Правая панель фильтров: фильтр по категории и времени
list_filter = ['category', 'created_at']
# Верхнее поле поиска: поиск по заголовку и аннотации
search_fields = ['title', 'summary']
# Иерархическая навигация по времени публикации (Год → Месяц → День)
date_hierarchy = 'created_at'
# Отображать 20 записей на странице
list_per_page = 20
Ключевые инструкции по настройке для admin.py
| Элемент конфигурации | Type | Функция |
|---|---|---|
| list_display | Список | Укажите, какие поля отображать на странице списка |
| list_filter | Список | Добавить боковую панель фильтров справа |
| search_fields | Список | Добавление поля поиска вверху |
| date_hierarchy | String | Навигация по иерархии дат |
| list_per_page | Цифры | Количество элементов на странице (по умолчанию 100) |
Обновите страницу администратора, нажмите "Posts" слева, и вы увидите полный список, функции фильтрации и поиска.
Ввод тестовых данных через Admin
Нажмите кнопку "Add Article" и заполните в форме заголовок, краткое описание и содержимое статьи.
Поле category автоматически подтягивает варианты из существующей Category (потому что оно установлено как ForeignKey).
Введите как минимум 5 статей, охватывающих разные категории, чтобы было удобно демонстрировать эффекты списка и фильтрации в последующих главах.
Порядок полей в форме Admin соответствует порядку, в котором поля определены в models.py. Если вы хотите изменить порядок, вы можете задать его в классе Admin.
fields = ['title', 'category', ...]Явно укажите порядок.
Редактирование форматированного текста (опциональное расширение)
По умолчанию поле ввода body представляет собой обычное текстовое поле, что делает ввод HTML неудобным.
Можно установитьdjango-summernoteчтобы получить WYSIWYG-редактор форматированного текста:
(venv) $ pip install django-summernote
Пример
INSTALLED_APPS = [
# ...
'django_summernote', # Зарегистрировать приложение
]
# Поддерживаемый лимит размера загружаемого файла (необязательно)
SUMMERNOTE_CONFIG = {
'summernote': {
'width': '100%',
'height': '480',
}
}
Затем в админ-панели измените поле content на редактор Summernote:
Пример
from django_summernote.admin import SummernoteModelAdmin
@admin.register(Post)
class PostAdmin(SummernoteModelAdmin): # Наследовать SummernoteModelAdmin
list_display = ['title', 'category', 'created_at']
list_filter = ['category']
search_fields = ['title', 'summary']
summernote_fields = ['content'] # Поле content использует редактор форматированного текста.
Теперь при редактировании статей область body представляет собой полнофункциональный редактор форматированного текста, позволяющий форматировать текст, вставлять изображения и настраивать стили.
django-summernoteЭто необязательно. Если вы не хотите устанавливать стороннюю библиотеку, вы вполне можете продолжать писать HTML в поле обычного текста. Остальной код этого руководства не зависит от того, установлен ли Summernote.
Локализация интерфейса Admin на китайский язык
Если вы укажете следующее в settings.py:LANGUAGE_CODE = 'zh-hans', интерфейс Admin автоматически переключился на китайский.
В определении моделиverbose_nameПараметр будет использоваться для подписей полей в форме Admin.
Итоги главы
В этой главе вы настроили серверную часть Django Admin: создали суперпользователя, зарегистрировали модели, настроили отображение списка/поиск/фильтрацию и при желании интегрировали редактор форматированного текста.
Теперь вы можете визуально управлять содержимым статей в браузере, не заходя в Shell для ручного ввода данных.
Другие расширения