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 25 Python
python检测远程udp端口是否打开的方法
Mar 14 Python
python计算一个序列的平均值的方法
Jul 11 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
Python中functools模块函数解析
Mar 12 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
python设计tcp数据包协议类的例子
Jul 23 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 Python
python开发实时可视化仪表盘的示例
May 07 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
mysql5写入和读出乱码解决
2006/11/25 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
layui使用label标签的方法
2019/09/14 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
python动态加载包的方法小结
2016/04/18 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
python开发简易版在线音乐播放器
2017/03/03 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
为数据库创建索引都需要注意些什么
2012/07/17 面试题
零件设计自荐信范文
2013/11/27 职场文书
党代会心得体会
2014/09/04 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
学校运动会开幕词
2016/03/03 职场文书
MySQL 十大常用字符串函数详解
2021/06/30 MySQL
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
vue特效之翻牌动画
2022/04/20 Vue.js