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.

Пример

# Путь к файлу: blog/admin.py
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_hierarchyStringНавигация по иерархии дат
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

Пример

# Путь к файлу: blog_project/settings.py
INSTALLED_APPS = [
    # ...
    'django_summernote',   # Зарегистрировать приложение
]

# Поддерживаемый лимит размера загружаемого файла (необязательно)
SUMMERNOTE_CONFIG = {
    'summernote': {
        'width': '100%',
        'height': '480',
    }
}

Затем в админ-панели измените поле content на редактор Summernote:

Пример

# Путь к файлу: blog/admin.py
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 для ручного ввода данных.

Другие расширения