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

 

posted @ 2019-03-01 21:35  studybrother  阅读(150)  评论(0编辑  收藏  举报