7.1 Admin 是什么
Django Admin 是内置的数据库后台管理界面,自动为已注册模型生成增删改查页面、列表筛选、搜索、权限控制。运营人员无需你写一行 CRUD 页面就能管理内容——这是 Django「自带电池」最耀眼的一颗。
- admin.site.register
- 把模型注册到后台的最简方式,注册后即出现在 Admin 首页的模型列表中。
- ModelAdmin
- 定制某模型后台行为的配置类,控制列表列、筛选器、搜索、表单布局等。
- list_display
- 列表页显示哪些字段(列)。可放模型字段、方法返回值或可调用对象。
- list_filter
- 列表页右侧的筛选侧栏,按指定字段(布尔、外键、日期)快速过滤。
- search_fields
- 启用列表页顶部搜索框,指定按哪些字段做模糊搜索。
- Inline(内联)
- 在父对象编辑页内嵌编辑关联子对象,如在文章页直接编辑其评论。分
TabularInline/StackedInline。 - list_editable
- 允许在列表页直接编辑某些字段,无需进入详情页,适合批量改状态。
7.2 最简注册
# blog/admin.py
from django.contrib import admin
from .models import Post, Category
admin.site.register(Post)
admin.site.register(Category)
访问 /admin/ 登录后即可管理 Post 与 Category——增删改查全都有了。
7.3 用 ModelAdmin 定制
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ("title", "category", "published", "views", "created")
list_filter = ("published", "category", "created")
search_fields = ("title", "body")
list_editable = ("published",)
date_hierarchy = "created"
ordering = ("-created",)
prepopulated_fields = {"slug": ("title",)}
list_per_page = 20
@admin.register 装饰器
比 admin.site.register(Post, PostAdmin) 更简洁:直接把 ModelAdmin 类和模型绑定。推荐统一用装饰器写法。
7.4 自定义列与操作
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ("title", "hot")
@admin.display(description="热度", boolean=True)
def hot(self, obj):
return obj.views > 100
# 批量动作:一键发布
actions = ["make_published"]
@admin.action(description="发布所选文章")
def make_published(self, request, queryset):
queryset.update(published=True)
7.5 Inline 内联编辑
from .models import Comment
class CommentInline(admin.TabularInline):
model = Comment
extra = 1
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
inlines = [CommentInline] # 文章页内直接管理评论
7.6 表单布局:fieldsets
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
fieldsets = (
("基本信息", {"fields": ("title", "category")}),
("内容", {"fields": ("body",)}),
("状态", {"fields": ("published",), "classes": ("collapse",)}),
)
readonly_fields = ("views", "created")
7.7 权限与后台美化
Admin 与认证系统深度集成:staff 用户才能登录,superuser 拥有全部权限,普通职员可按模型授予 add/change/delete/view 权限。
| 配置 | 作用 |
|---|---|
| admin.site.site_header | 后台顶部标题 |
| admin.site.site_title | 浏览器标签标题 |
| admin.site.index_title | 首页标题 |
| has_add/change_permission | 动态控制权限 |
# 换个更专业的第三方后台皮肤(可选)
$ pip install django-jazzmin
# INSTALLED_APPS 里放到 admin 之前
Admin 是内部工具
Admin 面向可信的运营/管理员,不是面向终端用户的界面。别把它当作产品前台暴露给公众;面向用户的操作应走自己的视图与表单。
7.8 小结与下一步
- 注册模型即得后台;用
ModelAdmin定制列表、筛选、搜索、批量动作。 list_display/list_filter/search_fields/list_editable是四件常用利器。- Inline 内联管理关联对象,fieldsets 组织表单,权限系统控制谁能改什么。
- 下一章进入 用户认证与权限——深入 Admin 背后的 auth 系统。