巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

时间:2023-03-09 15:40:39
巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

1.编辑删除&&多对多关系的其他方法

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

提交,数据,得到结果

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

查看运行

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

给编辑和删除,添加样式

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

打印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表

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

级联删除就是通过这样的方式进行删除的,在这里默认就是级联删除的,记住这一点,在多对一的关系中(书和出版社)

编辑数据,在这里和添加数据只相差一句话(如下图所示:)

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

edit_book.html和add_book.html页面结果差不多,我们进行修改就可以了

在这里我们应该回复的是edit_book.html页面

获取第n个,是为了保存已经选取的数据

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

这样,我们就进行了成功的选择

怎样对多选的复选框进行,筛选?(下面的是筛选界面的一开始未修改的界面)

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

成功被选择中

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

一些补充:

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

运行:

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

book_id对应的author_id已经修改成了2

现在我们再改回去

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

报错

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

实际情况的写法

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

这时候恢复了原样

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

清除id=6的对应关系

运行,

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

之前的数据

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

之后的数据:

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

作业:

书籍管理

作者管理

出版社管理:

  用上模板继承,相关知识(利用模板继承来实现这个工作)

2.基于双下划线的跨表查询1

多对1的正向查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

查看表的对应关系

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

首先连接表

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

在连表的基础上进行筛选

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

现在我们只需要publish的名字

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

第一种写法是基于对象的用的是get方法,

下边的第二种写法是基于双下划线filter方法,不能用get

SQL里边叫字段,ORM写在python里边叫属性

整体代码:

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

查找出版社和地址两者

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

结果:

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

对比三者的区别

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

结果如下所示:

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

正向一对一:

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

结果:

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

作者的id是1

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

也就是"鲁智深"

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

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

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

这时候,作者多了1个武松

升级查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

第三条语句有问题!!!

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询

3.基于双下划线的跨表查询2

通过表之间的er图查看关系

巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询