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爬取附近餐馆信息代码示例
Dec 09 Python
小白入门篇使用Python搭建点击率预估模型
Oct 12 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
对Python协程之异步同步的区别详解
Feb 19 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
python3.8下载及安装步骤详解
Jan 15 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
Jun 24 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
javascript Prototype 对象扩展
2009/05/15 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
利用python批量检查网站的可用性
2016/09/09 Python
python 文件操作删除某行的实例
2017/09/04 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
护理专科自荐书范文
2014/02/18 职场文书
学生会竞聘书范文
2014/03/31 职场文书
设计大赛策划方案
2014/06/13 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
2016新年致辞
2015/08/01 职场文书
pandas进行数据输入和输出的方法详解
2022/03/23 Python