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 相关文章推荐
利用Psyco提升Python运行速度
Dec 24 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
基于python爬虫数据处理(详解)
Jun 10 Python
python 换位密码算法的实例详解
Jul 19 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
Jun 11 Python
利用python画出折线图
Jul 26 Python
pycharm 解除默认unittest模式的方法
Nov 30 Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
详解Vue方法与事件
2017/03/09 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
浅谈Python基础—判断和循环
2019/03/22 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
小区门卫管理制度
2014/01/29 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
2014年导购员工作总结
2014/11/18 职场文书
会计简历自我评价
2015/03/10 职场文书
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python