Django 提供了基于 web 的管理工具。
django.contrib是一套庞大的功能集,它是Django基本代码的组成部分。

INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', "app01" ]
django.contrib是一套庞大的功能集,它是Django基本代码的组成部分。
启动admin管理工具
要启动admin管理工具,只需要在urls.py中启用admin对应的路由配置项即可。通常我们在使用PyCharm生成项目时会在 urls.py 中自动设置好。
from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), ]
1、创建超级用户
python manage.py createsuperuser
2、想要在admin 界面管理某个数据模型(model),我们需要先将该数据模型(model)注册到 admin。admin.py
from django.contrib import admin from app import models # Register your models here. admin.site.register(models.UserInfo)
3、admin界面设置为中文,需要在setting配置文件中修改
LANGUAGE_CODE = 'zh-hans'
4、admin登录:用超级用户登录
http://127.0.0.1:8000/admin
5、登录成功进入后台首页
6、在models中用元信息设置别名,例:
class Meta: verbose_name = '评论表' verbose_name_plural = verbose_name
7、字段属性blank=True时,该字段在django admin里面可以不填,例:
parent_comment = models.ForeignKey("self", null=True, blank=True)
更多功能:点击参考
admin定制:
这种方式的注册比较简单,如果想要进行更多的定制操作,需要利用ModelAdmin进行操作,如:
# 注册方式一 class UserInfoAdmin(admin.ModelAdmin): list_display = ['username', 'blog'] admin.site.register(models.UserInfo, UserInfoAdmin) # 注册方式二 @admin.register(models.UserInfo) class UserInfoAdmin(admin.ModelAdmin): list_display = ['username', 'blog']
ModelAdmin支持的定制项:
list_display:列表时,定制这张表显示哪些列,多对多关系字段无法放入,可以放自定义的函数
@admin.register(models.UserInfo) class UserInfoAdmin(admin.ModelAdmin): list_display = ['username', 'blog']
显示效果:
还可以定义一个函数,给表添加一列:
from django.utils.safestring import mark_safe @admin.register(models.UserInfo) class UserInfoAdmin(admin.ModelAdmin): def delete_obj(self): return mark_safe('<a href="#">删除</a>') list_display = ['username', 'blog', delete_obj]
显示效果:
list_display_links:列表时,哪个字段可以点击跳转
@admin.register(models.UserInfo) class UserInfoAdmin(admin.ModelAdmin): list_display = ['username', 'blog'] list_display_links = ['blog']
效果图:
list_filter:列表时,定制右侧快速筛选。例如价格相同,出版社相同等等
@admin.register(models.UserInfo) class UserInfoAdmin(admin.ModelAdmin): def deletes(self): return mark_safe('<a href="#">删除</a>') list_display = ['username', 'blog', deletes] list_display_links = ['blog'] list_filter = ['username']
效果图:
list_editable:列表时,可以直接编辑的列,与list_display_links有冲突
from django.utils.safestring import mark_safe @admin.register(models.UserInfo) class UserInfoAdmin(admin.ModelAdmin): def deletes(self): return mark_safe('<a href="#">删除</a>') list_display = ['username', 'blog', deletes] list_display_links = ['blog'] list_filter = ['username'] list_editable = ['username']
效果图:
search_fields:列表时,模糊搜索的功能。可以给多个字段,或的关系
search_fields = ['username']
效果图:
date_hierarchy:列表时,对Date和DateTime类型进行搜索
@admin.register(models.UserInfo) class UserInfoAdmin(admin.ModelAdmin): def deletes(self): return mark_safe('<a href="#">删除</a>') list_display = ['username', 'blog', 'create_time', deletes] list_display_links = ['blog'] # 可以点击的链接 list_filter = ['username'] # 过滤 list_editable = ['username'] # 可以编辑的列 search_fields = ['username'] # 模糊搜索 date_hierarchy = 'create_time' # 对日期搜索
效果图:
action:列表时,定制action中的操作
# 定制Action行为具体方法 def func(self, request, queryset): # 选中后需要实现的功能,修改或者删除等 print(self, request, queryset) print(request.POST.getlist('_selected_action')) func.short_description = "中文显示自定义Actions" actions = [func, ] # Action选项都是在页面上方显示 actions_on_top = True # Action选项都是在页面下方显示 actions_on_bottom = False # 是否显示选择个数 actions_selection_counter = True
效果图:
fields:详细页面时(编辑页面),显示字段的字段,即需要编辑的字段,用于隐藏有默认值的字段或者可以为空的字段
fields = ['username']
效果图:
更多参数参考:点击
效果对照: