这次我们来介绍 Admin 站点管理,通过模型对数据进行增删改查等基本操作。
运行环境
Windows 10;Pycharm Community Edition 2020.1.3;Django 3.0.8
所有的代码网盘自取:
链接:https://pan.baidu.com/s/1qPX-MifX0AA6lZAdTYB_Sw
提取码:7nsy
概述
内容发布:
负责添加、修改、删除内容。这里的内容就是数据,换句话说就是使用可视化界面管理数据。
公告访问:
公告访问再次不做介绍,我们主要学习内容发布。
配置 Admin
管理数据前,我们需要进行相关的配置。首先打开 Pycharm 进入到 settings.py,添加第一行代码:
INSTALLED_APPS = [
'django.contrib.admin', # 默认已经添加好
# ……
'myApp'
]
创建管理员用户
配置好 Admin 后,我们就可以创建一个管理员用户用来管理数据了。首先在 project 目录下输入命令 python manage.py createsuperuser
,然后按照提示输入用户名,邮箱及密码。其中用户名默认为电脑用户名,密码长度不能少于 8 个字符。
我们在 google chrome 中输入 127.0.0.1:8000/admin 进入登录界面(耐心等待):
输入刚才设置的账号密码进入 Django administration:
汉化
在 settings.py 中翻到最后,将注释中的代码修改为下面的代码:
# 设置语言
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-Hans'
# 设置时间
# TIME_ZONE = 'UTC'
# 注意:若使用字符串为Beijing则有可能报错
TIME_ZONE = 'Asia/Shanghai'
直接 Ctrl+S 保存文件,刷新浏览器页面即可:
管理数据表
接下来我们添加数据,进行数据表的管理。
修改 admin.py 文件
在 admin.py 文件中注册类,进行数据的添加:
from .models import Grades, Students
# 注册
admin.site.register(Grades)
admin.site.register(Students)
保存文件并刷新浏览器得到显示为:
图中的 Gradess 和 Studentss 会自动在类名后添加 s。点入类名即可看到数据,这里我们可以看到 Studentss 和重写 str 的 Gradess:
自定义管理页面
重写 str 的 Grades 明显要好看一些,但我们想要像数据库中一样看到表项等信息,就要进行自定义管理页面。
属性说明
我们继续在 admin.py 中进行修改。自定义管理页面需要继承 admin.ModelAdmin
,admin.ModelAdmin
为默认管理页面。
# 注册
class GradeAdmin(admin.ModelAdmin):
# 列表页属性
# list_display = []
# list_filter = []
# search_fields = []
# list_per_page =
# 添加、修改页属性
# fields = []
# fieldsets = []
admin.site.register(Grades, GradeAdmin)
admin.site.register(Students)
list_display :显示字段
list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete']
保存文件后刷新页面,数据按照表项进行显示:
list_filter:过滤字段
list_filter = ['gname']
保存文件后刷新页面,右方出现过滤器,可对 gname
进行过滤:
search_fields:搜索字段
search_fields = ['gname']
list_per_page:分页
list_per_page = 5
5 个数据为一页,因为我们只有一个数据,因此刷新后无效果。
field:修改和添加时显示的属性先后顺序
当我们点击右上角的增加 GRADES 或 PK 为 1 的序号,就可以对数据进行增加和修改:
增加页面:
此时属性按照默认的顺序进行排列。我们可以通过以下语句对属性顺序进行认为修改:
fields = ['ggirlnum', 'gboynum', 'gname', 'gdate', 'isDelete']
刷新浏览器后,属性顺序按照代码中的顺序显示:
fieldsets:给属性分组
使用以下语句对属性进行分组:
# 注意fieldsets不能与fields一起使用
fieldsets = [
("num", {"fields": ['ggirlnum', 'gboynum']}),
("base", {"fields": ['gname', 'gdate', 'isDelete']}),
]
刷新浏览器后得到页面为:
此时我们通过管理者模式添加一个数据:
页面中成功添加:
我们再对数据库进行检查,发现数据库中也会同步添加(有点强大):
在添加以下代码对 Students 类自定义管理页面:
class StudentAdmin(admin.ModelAdmin):
list_display = ['pk', 'sname', 'sage', 'sgender', 'scontend', 'sgrade', 'isDelete']
list_per_page = 2
admin.site.register(Students, StudentAdmin)
此时我们可以看到实现了分页:
为了界面好看,我们在 models.py 中重写 str:
# 重写Grades的str
def __str__(self):
return self.gname
# 重写Students的str
def __str__(self):
return self.sname
关联对象
如果我们想在创建班级时就同时创建学生,则需要关联对象,班级和学生是一对多的关系。
class StudentsInfo(admin.TabularInline):
model = Students
extra = 2
class GradeAdmin(admin.ModelAdmin):
inlines = [StudentsInfo]
此时在添加班级页面便可以同时添加学生了(默认个数为2):
查看 Students,添加成功:
还有一种继承方式:
class StudentsInfo(admin.StackedInline): # 替换TabularInline
这种方式会展示不同样式的界面:
布尔值显示问题:
学生的性别显示为布尔值,为对号和错号,我们进行一些小的优化:
class StudentAdmin(admin.ModelAdmin):
def gender(self):
if self.sgender:
return "男"
else:
return "女"
# 设置页面列的名称
gender.short_description = "性别"
结果如下:
执行动作位置
我们还可以控制执行动作的位置,在 class StudentAdmin(admin.ModelAdmin):
中加入:
# 执行动作的位置
actions_on_top = False
actions_on_bottom = True
结果如下:
使用装饰器完成注册
我们通常使用的注册方式是使用装饰器完成注册,接下来对注册语句进行修改(页面内容不会变动):
@admin.register(Students) # 使用装饰器register完成注册
class StudentAdmin(admin.ModelAdmin):
# 中间省略
# admin.site.register(Students, StudentAdmin)
至此,我们所有关于站点管理的内容就讲完啦,这些知识完全够你平时进行使用。快去动手实践一下吧!