学习笔记,仅供参考
文章目录
- admin后台数据库管理
- 使用步骤
- 自定义后台管理数据表
- 配置步骤
- 模型管理器类
- 模型管理器的使用方法
- ModelAdmin模型管理器类中的高级管理功能
- 数据库表管理
- 修改模型类字段的显示名字
- 通过Meta内嵌类定义模型类的属性及展现形式
admin后台数据库管理
django 提供了后台管理数据库的接口admin,我们可以在开发的测试阶段使用。django 会搜集所有已注册的模型类,为这些模型类提拱数据管理界面,供开发者使用。
在开发阶段,我们使用admin后台数据库管理界面进行调试将非常的方便。
使用步骤
- 第一步:创建后台管理账号
创建管理员帐号,并根据提示完成注册:
F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite_db>python manage.py createsuperuserUsername (leave blank to use 'goatbishop'): darkgoat
Email address: goatbishop@gmail.com
Password:
Password (again):
Superuser created successfully.
我们需要在Username处输入用户名,在Email address处输入邮箱,在Password处输入密码(密码要复杂些,否则会提示密码太简单),在**Password (again)**处再次输入相同的密码(Django为了防止我们第一遍时输入错误)
- 第二步:开启服务器
- 用注册的帐号登陆后台管理界面
后台管理的登录地址:http://127.0.0.1:8000/admin
我们向http://127.0.0.1:8000/admin发起请求:
输入用户名和密码,点击Log in,得到如下页面:
我们点开Users:
我们看到,这里有一张表,表里有一条记录,这张表对应着我们mywebdb数据库中的auth_user数据表:
mysql> select id,username,email from auth_user;+----+----------+----------------------+
| id | username | email |
+----+----------+----------------------+
| 1 | darkgoat | goatbishop@gmail.com |
+----+----------+----------------------+
1 row in set (0.00 sec)
我们点开darkgoat,填入姓和名:
点击保存,并查看auth_user数据表:
mysql> select username, first_name, last_name from auth_user;+----------+------------+-----------+
| username | first_name | last_name |
+----------+------------+-----------+
| darkgoat | 扬 | 桂 |
+----------+------------+-----------+
1 row in set (0.00 sec)
更改成功!
自定义后台管理数据表
若想要自己定义的模型类也能在 /admin 后台管理界中显示和管理,需要将自己的类注册到后台管理界面,添加自己定义模型类的后台管理数据表的,需要用admin.site.register(自定义模型类) 方法进行注册
配置步骤
- 在应用app中的admin.py中导入注册要管理的模型models类
我们打开bookstore应用的admin.py,导入模型类:
from . import models
- 调用admin.site.register 方法进行注册
admin.site.register(models.Book)
#admin.site.register(自定义模型类)
现在,我们回到http://127.0.0.1:8000/admin/后台管理界面:
界面中多了一个Books,我们点进去看看:
我们看到5本书,这些记录都是我们之前手动添加到数据库的。
现在,我们点进去第一个记录:
这个界面是Django通过我们的模型类,自动帮我们生成的。在这个界面中,我们可以对记录进行修改或删除。
现在,我们对这条记录做出如下修改,并点击保存:
回到http://127.0.0.1:8000/admin/bookstore/book/:
我们再对Author进行注册,并刷新admin数据库管理界面:
再点击Authors:
我们发现,这里是一堆Author object(#),而不像Books界面中显示的那么直观,利于我们进行后续的判断,这是因为我们在Book模型类中对__str__方法进行了重写,现在,我们也对Author模型类的__str__方法进行重写。
models.py
class Author(models.Model):name = models.CharField("姓名", max_length = 30, null = False,
unique = True, db_index = True)
age = models.IntegerField("年龄, ", null = False,
default = 1)
email = models.EmailField("邮箱", null = True)
def __str__(self):
string = "姓名:{}, 年龄:{}".format(self.name, self.age)
return string
记得更改过models.py文件后要进行迁移操作。
我们再刷新一下界面:
very well
模型管理器类
模型管理器类可以用后台管理界面添加新功能。后台管理器类须继承自 django.contrib.admin 里的 ModelAdmin 类
模型管理器的使用方法
- 在<应用app>/admin.py 里定义模型管理器类
......
- 在<应用app>/admin.py 里注册管理器类与模型类关联
from . import models
admin.site.register(models.YYYY, XXXX_Manager)
#注册管理器类与模型类关联
#models.YYYY是模型类
#管XXXX_Manager是管理器类
ModelAdmin模型管理器类中的高级管理功能
类成员
功能
list_display
控制哪些字段会显示在Admin的修改列表页面中
list_display_links
控制list_display中的字段是否应该链接到对象的“更改”页面
list_filter
设置激活Admin修改列表页面右侧栏中的过滤器
search_fields
设置启用Admin更改列表页面上的搜索框
list_editable
设置在更改列表页面上对某字段直接进行编辑修改
其它参见https://docs.djangoproject.com/en/1.11/ref/contrib/admin/
- 举个例子
我们将Book管理器类与Book模型类关联起来,并在更改列表页面中添加一些高级功能。
bookstore应用下的admin.py文件:
from django.contrib import adminfrom . import models
# Register your models here.
class Book_Manager(admin.ModelAdmin):
list_display = ['title', 'pub','exfacPrice', 'price']
list_filter = ['pub']
admin.site.register(models.Author)
admin.site.register(models.Book, Book_Manager)
向Book更改列表页面http://127.0.0.1:8000/admin/bookstore/book/发起请求:
数据库表管理
修改模型类字段的显示名字
在模型类中,各字段的第一个参数为verbose_name,此字段的值会在后台数据库管理页面显示,比如我们的Book模型类是这样定义的:
class Book(models.Model):title = models.CharField("书名", max_length = 30)
pub = models.CharField("出版社名", max_length = 50,null = True)
exfacPrice = models.DecimalField("出厂价",
max_digits = 6, decimal_places = 2,
default = 0)
price = models.DecimalField("售价",
max_digits = 6, decimal_places = 2,
default = 0)
def __str__(self):
string = "书名:%s, 出版社:%s" % (self.title, self.pub)
return string
我们查看一下后台数据库管理页面:
通过Meta内嵌类定义模型类的属性及展现形式
在模型类中,可以通过定义内部类class Meta的方式,来重新定义当前模型类和数据表的一些属性信息。
- 用法
title = CharField(....)
class Meta:
1. db_table = '数据表名'
- 该模型所用的数据表的名称。(设置完成后需要立马更新同步数据库)
2. verbose_name = '单数名'
- 该模型对象的一个易于理解的名称(单数),用于显示在/admin管理界面中
3. verbose_name_plural = '复数名'
- 该对象复数形式的名称(复数),用于显示在/admin管理界面中
- 举个例子
我们在models.py中新增一个Publisher模型类,并定义Meta内部类:
class Publisher(models.Model):pub = models.CharField("出版社名", max_length = 50,null = True)
booknumber = models.PositiveIntegerField("初版书籍总量", default = 0)
tele = models.CharField("联系电话", max_length = 11, null = False)
class Meta:
db_table = "china_publisher"
verbose_name = "ChinaPublisher"
verbose_name_plural = "ChinaPublishers"
在Django shell中给china_publisher数据表添加一些数据:
In [2]: from bookstore import modelsIn [3]: models.Publisher.objects.create(pub="人民邮电出版社", tele="81055364")
Out[3]: <Publisher: Publisher object (1)>
In [4]: models.Publisher.objects.create(pub="清华大学出版社", tele="62783933")
Out[4]: <Publisher: Publisher object (2)>
In [5]: models.Publisher.objects.create(pub="机械工业出版社", tele="88379833")
Out[5]: <Publisher: Publisher object (3)>
In [6]: models.Publisher.objects.create(pub="电子工业出版社", tele="88258888")
Out[6]: <Publisher: Publisher object (4)>
打开admin数据库管理界面:
点开ChinaPublishers:
查看mywebdb数据库中的数据表们:
mysql> show tables;+----------------------------+
| Tables_in_mywebdb |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| bookstore_author |
| bookstore_book |
| china_publisher |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
13 rows in set (0.00 sec)
可以看到,Publisher模型类创建的数据表名字为china_publisher。