Python Django ORM连表正反操作技巧


Posted in Python onJune 13, 2021

一、A表男生,B表女生,C表关系

Python Django ORM连表正反操作技巧Python Django ORM连表正反操作技巧Python Django ORM连表正反操作技巧Python Django ORM连表正反操作技巧

1通过A表查与某个男生有关系的所有女生

思想1:在A表中确认男生后,通过反查到C表,获取相关内容(QuerySet),然后再跨到B表获取所有女生信息。

obj=models.Boy.objects.filter(name='陈亮').first()
love_list=obj.love_set.all()  #love_set.all()反查相关所有(跨表)
for i in love_list:  #每个i是一个Love的对象,里面有一个id有一个nick
    print(i.g.nick)      #g是models里面class里面的属性

思想2:通过C表跨到A表找到对应男生,然后再跨到B表找到女生

love_list=models.Love.objects.filter(b__name='陈亮')  #这个是b__跨表查询
 for i in love_list:
     print(i.g.nick, love_list)    #这个是按照.类里面的名字查询

二、A表男生,B表女生,自动创建C表ManyToManyField

Python Django ORM连表正反操作技巧Python Django ORM连表正反操作技巧Python Django ORM连表正反操作技巧Python Django ORM连表正反操作技巧

class Boy(models.Model):
    name = models.CharField(max_length=32)
    m=models.ManyToManyField('Girl')  # 让其自动创建一个表

通过boy表查对应的girl

obj=models.Boy.objects.filter(name='陈亮').first()
# obj.m.add(2,3)  #添加新关系
# obj.m.clear()   #把跟name='陈亮‘有关的全部删除
   girl_list=obj.m.all()   #直接通过.m就查到女孩相关所有
#girl_list = obj.m.filter(二次筛选)
   for i in girl_list:
       print(i.id,i.nick)

通过girl反查对应的男孩

oss = models.Girl.objects.filter(nick='小猫').first()
a=oss.boy_set.all()  #跨表查询
for i in a:
     print(i.name)

三、A表男女混合表,B表关系表

Python Django ORM连表正反操作技巧&&&Python Django ORM连表正反操作技巧

Python Django ORM连表正反操作技巧Python Django ORM连表正反操作技巧

思路:男女信息(名字,性别等)都放在一个表,另外一个表(两个属性)放一个男生的外键(记录男生id)放一个女生的外键(记录女生的id)

问题:反查的时候需要两个外键不知所措(之前的都是一个外键)

解决方法:related_query_name或者related_name(更简单)

g=models.ForeignKey('Boy_and_girl',related_name='boys',on_delete=models.CASCADE,null=True)

#以前跨表需要写上obj.小写的表名_set.all 比如obj.boy_set.all(),用了**后就不用写小写的表名_set了

#related_query_name 关联的是哪个ForeignKey
#obj对象男.girl_set.all() 把这个名字换成related_query_name的名字
#obj对象女.boy_set.all() #默认表明+_set

#related_name 更简单
#obj对象男.girl.all() 这种方法改名可以直接写b.all()获取有关联的所有女性表
#obj对象女.boy.all()

从男女混合表中查到具体人对应所有的有关系的异性

obj=models.Boy_and_girl.objects.filter(id=3).first() #对象
if obj.gender==1:
    bb=obj.girls.all()      #根据对象反向查找到跟对象有关的所有信息(在另外一张表上)
    for i in bb:
        print(i.g.nickname)  #再带着相关信息(女孩)回到原来的表再查询
else:
    bb = obj.boys.all()
    for i in bb:
        print(i.b.nickname)

四、A表男女混合表(从一张表开始)FK自关联

Python Django ORM连表正反操作技巧&&&Python Django ORM连表正反操作技巧

思路:男女混合表,在同一张表自动生成另外一张自己与自己相关联的表(类似于Django model中的class Meta详解

以上就是Django-ORM-连表正反操作的详细内容,更多关于Django-ORM-连表正反操作的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现斐波那契递归函数的方法
Sep 08 Python
Django中更新多个对象数据与删除对象的方法
Jul 17 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
详解python中的装饰器
Jul 10 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
python实现Flappy Bird源码
Dec 24 Python
详解python持久化文件读写
Apr 06 Python
python 爬取学信网登录页面的例子
Aug 13 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
Python基于百度AI实现OCR文字识别
Apr 02 Python
基于python检查矩阵计算结果
May 21 Python
python不同版本的_new_不同点总结
Dec 09 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
django解决跨域请求的问题详解
2019/01/20 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
python解析多层json操作示例
2019/12/30 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
Python logging模块handlers用法详解
2020/08/14 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
大学四年规划书范文
2013/12/27 职场文书
实习心得体会
2014/01/02 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
中学教师培训制度
2014/01/31 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
建党伟业的观后感
2015/06/01 职场文书
安全教育主题班会总结
2015/08/14 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
html5表单的required属性使用
2021/07/07 HTML / CSS
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技