ORM多表查询——关联查询
一、關(guān)聯(lián)查詢:
通過(guò)父表參數(shù)獲取從表數(shù)據(jù),通過(guò)從表參數(shù)獲取父表數(shù)據(jù)
從表查詢主表中的數(shù)據(jù)
附件:數(shù)據(jù)表截圖
項(xiàng)目表
?接口表
?現(xiàn)在要實(shí)現(xiàn)的需求如下:
1、查詢項(xiàng)目名稱中包含’搜狗‘的所屬接口信息:
分析:獲取的是接口信息,所以Interfaces開(kāi)頭進(jìn)行查詢
?2、查詢項(xiàng)目負(fù)責(zé)人中包含’zilv‘的所屬接口信息
分析:獲取的是接口信息,所以Interfaces開(kāi)頭進(jìn)行查詢
主表查詢從表中的數(shù)據(jù)
3、查詢接口名稱包含“收藏”所屬的項(xiàng)目名稱
分析:獲取項(xiàng)目信息,所以Projects開(kāi)頭進(jìn)行查詢
?查詢格式為:
關(guān)聯(lián)字段名稱__關(guān)聯(lián)模型類(lèi)中的字段名稱__查詢類(lèi)型
二、通過(guò)從表模型對(duì)象(已經(jīng)獲取到),如何獲取父表數(shù)據(jù)
1、Interfaces.objects.filter(name__contains='收藏')[0].projects? 2、可以通過(guò)外鍵字段先獲取父表模型對(duì)象(interfaces_obj.projects)
interfaces_obj=Interfaces.objects.get(id=1)
interfaces_obj.projects.name
三、通過(guò)父表模型對(duì)象(已經(jīng)獲取到),如何獲取從表數(shù)據(jù)
1、Projects.objects.filter(name__contains='搜狗')[0].interfaces.all()?2、projects_obj=Projects.objects.get(id=1)
projects_obj.interfaces_set.all()
默認(rèn)可以通過(guò)從表模型類(lèi)名小寫(xiě)_set,返回manager對(duì)象,可以進(jìn)一步使用filter進(jìn)行過(guò)濾
如果在從表模型類(lèi)的外鍵字段指定了related_name參數(shù),那么會(huì)使用related_name指定參數(shù)作為名稱
projects_obj=Projects.objects.get(id=1)
projects_obj.interfaces.all()
四、排序
可以使用QuerySet(manager對(duì)象).order_by('字段名1','字段名2','-字段名3')
默認(rèn)為升序asc,可以在字段名稱前添加“-”,那么為desc降序
升序(默認(rèn)為升序)
Projects.objects.filter(Q(name__contains='2') | Q(leader='kb')).order_by('name')降序
Projects.objects.filter(Q(name__contains='2') | Q(leader='kb')).order_by('-name')?排序(降序、升序混合使用)
qs = Projects.objects.filter(Q(name__contains='2') | Q(leader='kb')).order_by('-name','leader')總結(jié)
以上是生活随笔為你收集整理的ORM多表查询——关联查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JDK的安装与环境变量配置
- 下一篇: 通过Jenkins执行脚本,生成自动化测