当前位置 : 主页 > 编程语言 > python >

Django(part31)--admin后台数据库管理

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,仅供参考 文章目录 ​​admin后台数据库管理​​ ​​使用步骤​​ ​​自定义后台管理数据表​​ ​​配置步骤​​ ​​模型管理器类​​ ​​模型管理器的使用方法​

学习笔记,仅供参考



文章目录

  • ​​admin后台数据库管理​​
  • ​​使用步骤​​
  • ​​自定义后台管理数据表​​
  • ​​配置步骤​​
  • ​​模型管理器类​​
  • ​​模型管理器的使用方法​​
  • ​​ModelAdmin模型管理器类中的高级管理功能​​
  • ​​数据库表管理​​
  • ​​修改模型类字段的显示名字​​
  • ​​通过Meta内嵌类定义模型类的属性及展现形式​​



admin后台数据库管理



django 提供了后台管理数据库的接口admin,我们可以在开发的测试阶段使用。django 会搜集所有已注册的模型类,为这些模型类提拱数据管理界面,供开发者使用。

在开发阶段,我们使用admin后台数据库管理界面进行调试将非常的方便。



使用步骤



  • 第一步:创建后台管理账号


创建管理员帐号,并根据提示完成注册:

F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite_db>python manage.py createsuperuser
Username (leave blank to use 'goatbishop'): darkgoat
Email address: goatbishop@gmail.com
Password:
Password (again):
Superuser created successfully.

我们需要在Username处输入用户名,在Email address处输入邮箱,在Password处输入密码(密码要复杂些,否则会提示密码太简单),在**Password (again)**处再次输入相同的密码(Django为了防止我们第一遍时输入错误)



  • 第二步:开启服务器
python manage.py runserver



  • 用注册的帐号登陆后台管理界面

后台管理的登录地址:http://127.0.0.1:8000/admin



我们向http://127.0.0.1:8000/admin发起请求:

Django(part31)--admin后台数据库管理_python

输入用户名和密码,点击​​Log in​​,得到如下页面:

Django(part31)--admin后台数据库管理_django_02

我们点开Users:

Django(part31)--admin后台数据库管理_django_03

我们看到,这里有一张表,表里有一条记录,这张表对应着我们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,填入姓和名:

Django(part31)--admin后台数据库管理_django_04



点击保存,并查看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​​ 方法进行注册
from django.contrib import admin
admin.site.register(models.Book)
#admin.site.register(自定义模型类)



现在,我们回到http://127.0.0.1:8000/admin/后台管理界面:

Django(part31)--admin后台数据库管理_python_05

界面中多了一个Books,我们点进去看看:

Django(part31)--admin后台数据库管理_python_06

我们看到5本书,这些记录都是我们之前手动添加到数据库的。

现在,我们点进去第一个记录:

Django(part31)--admin后台数据库管理_数据库管理_07

这个界面是Django通过我们的模型类,自动帮我们生成的。在这个界面中,我们可以对记录进行修改或删除。

现在,我们对这条记录做出如下修改,并点击保存:

Django(part31)--admin后台数据库管理_数据库管理_08

回到http://127.0.0.1:8000/admin/bookstore/book/:

Django(part31)--admin后台数据库管理_后台管理_09



我们再对Author进行注册,并刷新admin数据库管理界面:

Django(part31)--admin后台数据库管理_python_10

再点击Authors:

Django(part31)--admin后台数据库管理_python_11

我们发现,这里是一堆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文件后要进行迁移操作。



我们再刷新一下界面:

Django(part31)--admin后台数据库管理_python_12

very well



模型管理器类



模型管理器类可以用后台管理界面添加新功能。后台管理器类须继承自 ​​django.contrib.admin​​​ 里的 ​​ModelAdmin​​ 类



模型管理器的使用方法



  • 在​​<应用app>/admin.py​​ 里定义模型管理器类
class XXXX_Manager(admin.ModelAdmin):
......



  • 在​​<应用app>/admin.py​​ 里注册管理器类与模型类关联
from django.contrib import admin
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 admin
from . 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/发起请求:

Django(part31)--admin后台数据库管理_数据库管理_13



数据库表管理



修改模型类字段的显示名字



在模型类中,各字段的第一个参数为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

我们查看一下后台数据库管理页面:

Django(part31)--admin后台数据库管理_后台管理_14



通过Meta内嵌类定义模型类的属性及展现形式



在模型类中,可以通过定义内部类​​class Meta​​的方式,来重新定义当前模型类和数据表的一些属性信息。



  • 用法
class Book(models.Model):
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 models

In [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数据库管理界面:

Django(part31)--admin后台数据库管理_python_15

点开ChinaPublishers:

Django(part31)--admin后台数据库管理_数据库_16

查看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。

上一篇:Django(part33)--数据库的迁移
下一篇:没有了
网友评论