现在位置: 首页 > Django 教程 > 正文

Django Admin — 后台管理文章

本章你将学会配置 Django Admin,无需写前端代码就能拥有内容管理后台。


Admin 是什么?

Django Admin 是 Django 最强大的内置功能之一:你只需注册模型,它就自动生成一个完整的后台管理系统。

后台提供文章的增删改查、搜索、过滤、分页等功能,无需你自己写任何 CRUD 代码。


创建超级用户

首先需要创建一个管理员账号来登录后台:

(venv) $ python manage.py createsuperuser
用户名:admin
电子邮件地址:admin@runoob.com
Password:        # 输入密码(不会回显)
Password (again): # 重复密码
Superuser created successfully.

启动服务器后访问 http://127.0.0.1:8000/admin/,用刚才创建的账号登录。

(venv) $ python manage.py runserver

注册模型到 Admin

打开 blog/admin.py,注册 Post 和 Category 模型。

实例

# 文件路径:blog/admin.py
from django.contrib import admin
from .models import Category, Post

# 注册分类模型:最简单的注册方式
@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 关键配置说明

配置项类型作用
list_display列表指定在列表页显示哪些字段
list_filter列表右侧添加过滤侧边栏
search_fields列表顶部添加搜索框
date_hierarchy字符串按日期层级导航
list_per_page数字每页分页数量(默认 100)

刷新后台页面,点击左侧「文章」,可以看到完整的列表、过滤、搜索功能。


通过 Admin 录入测试数据

点击「增加 文章」按钮,在表单中填入标题、摘要、正文内容。

分类字段会自动从已创建的 Category 中拉取选项(因为设置的是 ForeignKey)。

录入至少 5 篇文章,覆盖不同的分类,方便后续章节展示列表和筛选效果。

Admin 的表单字段顺序与 models.py 中字段的定义顺序一致。如果想调整顺序,可以在 Admin 类中设置 fields = ['title', 'category', ...] 显式指定排列。


富文本编辑(可选扩展)

默认的正文输入框是纯文本框,输入 HTML 不太方便。

可以安装 django-summernote 来获得所见即所得的富文本编辑器:

(venv) $ pip install django-summernote

实例

# 文件路径:blog_project/settings.py
INSTALLED_APPS = [
    # ...
    'django_summernote',   # 注册应用
]

# 支持的文件上传大小限制(可选)
SUMMERNOTE_CONFIG = {
    'summernote': {
        'width': '100%',
        'height': '480',
    }
}

然后在 Admin 中将 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 字段使用富文本编辑器

现在编辑文章时,正文区域是一个完整的富文本编辑器,可以排版、插图、调整格式。

django-summernote 是可选的。如果不想安装第三方库,继续在纯文本框中写 HTML 也完全可以。本教程后续的代码与是否安装 Summernote 无关。


中文化 Admin 界面

如果在 settings.py 中设置了 LANGUAGE_CODE = 'zh-hans',Admin 界面已经自动切换为中文。

模型定义中的 verbose_name 参数会用于 Admin 表单的字段标签。


本章小结

本章你配置了 Django Admin 后台:创建超级用户、注册模型、配置列表展示/搜索/过滤、可选接入富文本编辑器。

现在你可以在浏览器中直观地管理文章内容,不再需要进 Shell 手动录数据。