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+selenium实现京东自动登录及秒杀功能
Nov 18 Python
Python列表推导式与生成器用法分析
Aug 02 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
python dict 相同key 合并value的实例
Jan 21 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
Python绘制频率分布直方图的示例
Jul 08 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
Python 面向对象部分知识点小结
Mar 09 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
详解Pandas 处理缺失值指令大全
Jul 30 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
Aug 27 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
3种php生成唯一id的方法
2015/11/23 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
javascript实用小函数使用介绍
2013/11/11 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
解密Python中的描述符(descriptor)
2015/06/03 Python
Python2.x与Python3.x的区别
2016/01/14 Python
Python编程之string相关操作实例详解
2017/07/22 Python
Python中django学习心得
2017/12/06 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
学习雷锋标语
2014/06/25 职场文书
小学数学教研活动总结
2014/07/01 职场文书
语文课外活动总结
2014/08/27 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
秋季运动会加油词
2015/07/18 职场文书