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 re正则表达式模块(Regular Expression)
Jul 16 Python
Python实现批量下载图片的方法
Jul 08 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
深入浅出分析Python装饰器用法
Jul 28 Python
Python对列表中的各项进行关联详解
Aug 15 Python
在pycharm下设置自己的个性模版方法
Jul 15 Python
Python 异常处理Ⅳ过程图解
Oct 18 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
Python竟然能剪辑视频
May 25 Python
Python tensorflow卷积神经Inception V3网络结构
May 06 Python
Python中的 enumerate和zip详情
May 30 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
PHP sprintf()函数用例解析
2011/05/18 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
jQuery的强大选择器小结
2009/12/27 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
Python sys.path详细介绍
2013/10/17 Python
Python实现的RSS阅读器实例
2015/07/25 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
python脚本定时发送邮件
2020/12/22 Python
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
shell的种类有哪些
2015/04/15 面试题
30岁生日感言
2014/01/25 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
高中军训感言500字
2014/02/24 职场文书
滴水洞导游词
2015/02/10 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书