巨蟒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图查看关系