一文搞懂 Django Admin 站点管理

这次我们来介绍 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.ModelAdminadmin.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)

至此,我们所有关于站点管理的内容就讲完啦,这些知识完全够你平时进行使用。快去动手实践一下吧!

猜你喜欢

转载自blog.csdn.net/weixin_44413191/article/details/107368638