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中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
不要用强制方法杀掉python线程
Feb 26 Python
python字典操作实例详解
Nov 16 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
Python笔记之工厂模式
Nov 20 Python
python飞机大战pygame碰撞检测实现方法分析
Dec 17 Python
实现Python与STM32通信方式
Dec 18 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
解决Pycharm 运行后没有输出的问题
Feb 05 Python
python小型的音频操作库mp3Play
Apr 24 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
Javascript this指针
2009/07/30 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
js比较日期大小的方法
2015/05/12 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
javascript轮播图算法
2016/10/21 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python中abs&map&reduce简介
2018/02/20 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
详解Python3中ceil()函数用法
2019/02/19 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
Python中if有多个条件处理方法
2020/02/26 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
python中字典增加和删除使用方法
2020/09/30 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
《藤野先生》教学反思
2014/02/19 职场文书
住宅质量保证书
2014/04/29 职场文书
机动车交通事故协议书
2015/01/29 职场文书