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

网友投稿 308 2022-08-31


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

学习笔记,仅供参考

文章目录

​​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'): darkgoatEmail address: goatbishop@gmail.comPassword:Password (again):Superuser created successfully.

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

第二步:开启服务器

python manage.py runserver

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

后台管理的登录地址:select id,username,email from auth_user;+----+----------+----------------------+| id | username | email |+----+----------+----------------------+| 1 | darkgoat | goatbishop@gmail.com |+----+----------+----------------------+1 row in set (0.00 sec)

我们点开darkgoat,填入姓和名:

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 adminadmin.site.register(models.Book)#admin.site.register(自定义模型类)

现在,我们回到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​​ 里定义模型管理器类

class XXXX_Manager(admin.ModelAdmin): ......

在​​<应用app>/admin.py​​ 里注册管理器类与模型类关联

from django.contrib import adminfrom . import modelsadmin.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

设置在更改列表页面上对某字段直接进行编辑修改

其它参见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更改列表页面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​​的方式,来重新定义当前模型类和数据表的一些属性信息。

用法

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 modelsIn [3]: models.Publisher.objects.create(pub="人民邮电出版社", tele="81055364")Out[3]: In [4]: models.Publisher.objects.create(pub="清华大学出版社", tele="62783933")Out[4]: In [5]: models.Publisher.objects.create(pub="机械工业出版社", tele="88379833")Out[5]: In [6]: models.Publisher.objects.create(pub="电子工业出版社", tele="88258888")Out[6]:

打开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。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Django(part33)--数据库的迁移(django重新生成迁移)
下一篇:ZooKeeper入门教程三分布式锁实现及完整运行源码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~