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中正则表达式的用法实例汇总
Aug 18 Python
python实现在pickling的时候压缩的方法
Sep 25 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
Jun 25 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
python爬虫爬取监控教务系统的思路详解
Jan 08 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
QML用PathView实现轮播图
Jun 03 Python
python如何快速拼接字符串
Oct 28 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
一棵php的类树(支持无限分类)
2006/10/09 PHP
PHP 程序员的调试技术小结
2009/11/15 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
经验几则 推荐
2006/09/05 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现股市信息下载的方法
2015/06/15 Python
Python中max函数用法实例分析
2015/07/17 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
Python简单实现控制电脑的方法
2018/01/22 Python
python素数筛选法浅析
2018/03/19 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
浅谈django的render函数的参数问题
2018/10/16 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
python二维图制作的实例代码
2020/12/03 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
西班牙在线药店:DosFarma
2020/03/28 全球购物
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
销售顾问的岗位职责
2013/11/13 职场文书
工程质量月活动方案
2014/02/19 职场文书
社区清明节活动总结
2014/07/04 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
学校团代会开幕词
2016/03/04 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis