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输出9*9乘法表的方法
May 25 Python
深入解析Python中函数的参数与作用域
Mar 20 Python
定制FileField中的上传文件名称实例
Aug 23 Python
python使用Matplotlib画条形图
Mar 25 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Django框架视图介绍与使用详解
Jul 18 Python
python对Excel的读取的示例代码
Feb 14 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
python实现人机五子棋
Mar 25 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
Python如何对齐字符串
Jul 30 Python
Python scrapy爬取起点中文网小说榜单
教你用Python爬取英雄联盟皮肤原画
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
You might like
php 学习资料零碎东西
2010/12/04 PHP
PHP 事件机制(2)
2011/03/23 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
JavaScript 密码强度判断代码
2009/09/05 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
环保建议书作文
2014/03/12 职场文书
文员岗位职责
2015/02/04 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
整理Python中常用的conda命令操作
2021/06/15 Python