0%

Django(四) 后台管理:创建管理员、注册模型类、自定义管理页面显示内容

详情请点阅读全文

后台管理

第1步、本地化:设置语言、时区

修改project1/settings.py

1
2
3
4
5
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans' #设置语言为中文

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai' #设置为中国时区

第2步,创建管理员

项目下打开cmd输入命令:python manage.py createsuperuser
实操:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> quit() #退出shell环境

D:\a\django-app\project1>py manage.py createsuperuser
用户名 (leave blank to use 'administrator'): admin
电子邮件地址: test@qq.com
Password:
Password (again):
密码跟 用户名 太相似了。
密码长度太短。密码必须包含至少 8 个字符。
这个密码太常见了。
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

py manage.py runserver

打开浏览器输入刚创建的用户名密码:http://127.0.0.1:8000/admin/
在这里插入图片描述

第3步,注册模型类

在应用下的admin.py中注册模型类。
告诉djang框架根据注册的模型类来生成对应表管理页面。

1
2
b = BookInfo()
str(b) __str__

1)project1/admin.py

1
2
3
4
5
from django.contrib import admin #导入admin模块
from app1.models import BookInfo,HeroInfo #导入模型模块
# Register your models here.

admin.site.register(BookInfo) # 注册模型类BookInfo

注册完成刷新页面就会展示模型类:
在这里插入图片描述

2)Book info名字哪里来

在这里插入图片描述

查询表【1】

1
2
3
4
5
6
7
8
9
10
D:\a\django-app\project1>py manage.py shell
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD6
4)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from app1.models import BookInfo
>>> b2=BookInfo.objects.all()
>>> b2
<QuerySet [<BookInfo: BookInfo object (3)>, <BookInfo: BookInfo object (4)>]> #冒号后面的:BookInfo即是第2/3个箭头的名字由来
>>>

★★★改变默认显示名

在app1/models.py里对应的model类加入如下代码

【新加入的代码】

1
2
3
4
5
6
7
8
9
10
11
12
# 一类
# 图书类
class BookInfo(models.Model):
'''图书模型类'''
# 图书名称,CharField说明是一个字符串,max_length指定字符串的最大长度
btitle = models.CharField(max_length=20)
# 出版日期,DateField说明是一个日期类型
bpub_date = models.DateField()

#【新加入的代码】
def __str__(self): #重定义系统的str方法,让它返回对应图书的名字
return self.btitle

查询表【2】注意查询出的b的名称变化

说明

1
2
3
4
b由
<QuerySet [<BookInfo: BookInfo object (3)>, <BookInfo: BookInfo object (4)>]>

<QuerySet [<BookInfo: 天龙八部>, <BookInfo: 射雕英雄传>]>

实操

1
2
3
4
5
6
7
8
9
10
11
>>> quit() #退出shell,下面重新进入,让代码生效

D:\a\django-app\project1>py manage.py shell
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD6
4)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from app1.models import BookInfo
>>> b=BookInfo.objects.all()
>>> b
<QuerySet [<BookInfo: 天龙八部>, <BookInfo: 射雕英雄传>]>

再看表:箭头处已经改变
在这里插入图片描述

把HeroInfo也注册到admin里,并让其显示英雄名

1) app1/admin.py

1
2
3
4
5
6
from django.contrib import admin #导入admin模块
from app1.models import BookInfo,HeroInfo #导入模型模块
# Register your models here.

admin.site.register(BookInfo) # 注册图书model类
admin.site.register(HeroInfo) # 注册英雄model类

2) app1/models.py

重点:
【返回对应图书的名字】
【返回英雄名】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from django.db import models
# 设计和表对应的类,模型类
# Create your models here.

# 一类
# 图书类
class BookInfo(models.Model):
'''图书模型类'''
# 图书名称,CharField说明是一个字符串,max_length指定字符串的最大长度
btitle = models.CharField(max_length=20)
# 出版日期,DateField说明是一个日期类型
bpub_date = models.DateField()

def __str__(self): #重定义系统的str方法,让它【返回对应图书的名字】
return self.btitle

# 多类
# 英雄人物类
# 英雄名 hname
# 性别 hgender
# 年龄 hage
# 备注 hcomment
# 关系属性 hbook,建立图书类和英雄人物类之间的一对多关系
class HeroInfo(models.Model):
'''英雄人物模型类'''
hname = models.CharField(max_length=20) # 英雄名称
# 性别,BooleanField说明是bool类型,default指定默认值,False代表男
hgender = models.BooleanField(default=False)
# 备注
hcomment = models.CharField(max_length=128)
# 关系属性 hbook,建立图书类和英雄人物类之间的一对多关系
# 关系属性对应的表的字段名格式: 关系属性名_id
hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE) #对应BookInfo表的主键ID

def __str__(self): #【返回英雄名】
return self.hname

页面效果:
在这里插入图片描述
在这里插入图片描述

3)增加个信息试试

在这里插入图片描述

第4步,自定义管理页面显示内容

自定义模型管理类。模型管理类就是告诉django在生成的管理页面上显示哪些内容。

0)例如book info正常是这样显示的,我们想让它显示出图书的其它信息:ID、书标题、出版日期

在这里插入图片描述

1)app1/admin.py 写自定义样式控制类,并挂载到注册上

【1】自定义类:控制页面显示内容(类名随意写),写完之后,要在注册模型那里加上此处写的类名做为参数才能真正显示
【2】把自定类样式作为参数挂载到注册部分

1
2
3
4
5
6
7
8
9
10
11
12
from django.contrib import admin #导入admin模块
from app1.models import BookInfo,HeroInfo #导入模型模块
# Register your models here.

# 【1】自定义类:控制页面显示内容(类名随意写),写完之后,要在注册模型那里加上此处写的类名做为参数才能真正显示
class control_view_Admin(admin.ModelAdmin):
'''自定义:图书样式管理类'''
list_display = ['id','btitle','bpub_date'] #list_display为显示指定表内容的固定写法

#注册类模型
admin.site.register(BookInfo,control_view_Admin) #【2】把自定类样式作为参数挂载到注册部分
admin.site.register(HeroInfo)

2)效果:

在这里插入图片描述

4步扩展,把heroinfo信息也显示出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from django.contrib import admin #导入admin模块
from app1.models import BookInfo,HeroInfo #导入模型模块
# Register your models here.

# 自定义类:控制页面显示内容(类名随意写),写完之后,要在注册模型那里加上此处写的类名做为参数才能真正显示
class control_bookview_admin(admin.ModelAdmin):
'''自定义:图书样式管理类'''
list_display = ['id','btitle','bpub_date'] #list_display为显示指定表内容的固定写法

class control_heroview_admin(admin.ModelAdmin):
list_display = ['id','hname','hgender','hcomment']

#注册类模型,control_view_Admin
admin.site.register(BookInfo,control_bookview_admin)
admin.site.register(HeroInfo,control_heroview_admin)

效果:
在这里插入图片描述