巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询
1.编辑删除&&多对多关系的其他方法

提交,数据,得到结果









查看运行


给编辑和删除,添加样式

我们点击删除,可以成功删除


打印sql语句的,在settings.py里边的配置
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
删除表,先删除,第三张表,再删除book表

级联删除就是通过这样的方式进行删除的,在这里默认就是级联删除的,记住这一点,在多对一的关系中(书和出版社)
编辑数据,在这里和添加数据只相差一句话(如下图所示:)

edit_book.html和add_book.html页面结果差不多,我们进行修改就可以了
在这里我们应该回复的是edit_book.html页面
获取第n个,是为了保存已经选取的数据

在这里的编辑页面需要,指定默认的书名

需要添加一个表示用户选中的选项,



这样,我们就进行了成功的选择
怎样对多选的复选框进行,筛选?(下面的是筛选界面的一开始未修改的界面)



点击运行,编辑一下"笑傲江湖"


成功被选择中
调试,里边也是被选中的:


注意图上的很多文字描述也是很重要的概述

一些补充:


运行:


book_id对应的author_id已经修改成了2
现在我们再改回去

报错

实际情况的写法


这时候恢复了原样

注意,这个author表,,只能写1/2/5



这时候只剩下5和5的对应关系

清除id=6的对应关系
运行,

之前的数据

之后的数据:

作业:
书籍管理
作者管理
出版社管理:
用上模板继承,相关知识(利用模板继承来实现这个工作)
2.基于双下划线的跨表查询1
多对1的正向查询




查看表的对应关系


双下滑先记住一句话,正向按字段,反向按表名
首先连接表

在连表的基础上进行筛选

现在我们只需要publish的名字

基于双下划线,正向按字段的写法

运行,得到结果,注意这种写法,拿到的是queryset类型的数据

第一种写法是基于对象的用的是get方法,
下边的第二种写法是基于双下划线filter方法,不能用get
SQL里边叫字段,ORM写在python里边叫属性
整体代码:

查找出版社和地址两者


联表说明,谁在左,谁在右无所谓,这就说明有很多中写法

结果:

对比三者的区别

结果如下所示:

正向一对一:

结果:



结果的键,是按照values里边的筛选项作为键





大英帝国是没有作者的,所以什么都没有显示


go语言圣经的作者是"鲁智深"


作者的id是1

也就是"鲁智深"


在对应关系表中,再添加一个对应作者2"武松",查看结果

依然是这几条语句,查看作者

这时候,作者多了1个武松
升级查询




第三条语句有问题!!!


3.基于双下划线的跨表查询2
通过表之间的er图查看关系


浙公网安备 33010602011771号