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使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
pandas分区间,算频率的实例
Jul 04 Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
通过Python实现一个简单的html页面
May 16 Python
pycharm 对代码做静态检查操作
Jun 09 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
使用python3构建文件传输的方法
2019/02/13 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
django中间键重定向实例方法
2019/11/10 Python
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
商务助理岗位职责
2013/11/13 职场文书
党员自我评价分享
2013/12/13 职场文书
揭牌仪式主持词
2014/03/19 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
大学校园招聘会感想
2015/08/10 职场文书
2016年暑期社会实践活动总结报告
2016/04/06 职场文书
JavaScript实例 ODO List分析
2022/01/22 Javascript
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python