使用 django orm 写 exists 条件过滤实例


Posted in Python onMay 20, 2020

要用django的orm表达sql的exists子查询,是个比较麻烦的事情,需要做两部来完成

from django.db.models import Exists, OuterRef
 
# 1. 定义子查询条件
relative_comments = Comment.objects.filter(
 post=OuterRef('pk'), # 注意外键关联方式:post为Comment表的字段,pk表示关联另一表主键
)
 
# 2. 使用annotate和filter共同定义子查询
Post.objects.annotate( # 使用exists定义一个额外字段
 recent_comment=Exists(recent_comments),
).filter(recent_comment=True) # 在条件中通过检查额外字段实现exists子查询过滤

这种方式比较麻烦,有其它简便方式的欢迎分享

官网参考: https://docs.djangoproject.com/en/2.1/ref/models/expressions/#filtering-on-a-subquery-expression

补充知识:关于使用django orm 时的坑

跨app 时外键报错

class Host(models.Model):
nid = models.AutoField(primary_key=True)
hostname = models.CharField(max_length=32, db_index=True)
ip = models.GenericIPAddressField(protocol=“ipv4”, db_index=True)
port = models.IntegerField()
# b = models.ForeignKey(to=“Business”, to_field=‘id')

class HostToApp(models.Model):
hobj = models.ForeignKey(to=‘Host', to_field=‘nid')
aobj = models.ForeignKey(to=‘Application', to_field=‘id')

class Application(models.Model):
name = models.CharField(max_length=32)

以上 model 都在一个models 文件下时不会报错。 但是一旦出现跨app 时会报以下错误:

users.HostToApp.aobj: (fields.E300) Field defines a relation with model ‘Application', which is either not installed, or is abstract.
users.HostToApp.aobj: (fields.E307) The field users.HostToApp.aobj was declared with a lazy reference to ‘users.application', but app ‘users' doesn't provide model ‘application'.

解决方案:

1、

from xxxx.models import Application

2、

class HostToApp(models.Model):
hobj = models.ForeignKey(to=‘Host', to_field=‘nid')
aobj = models.ForeignKey(to=‘xxxx.Application', to_field=‘id')

第二步很重要

以上这篇使用 django orm 写 exists 条件过滤实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python函数参数类型*、**的区别
Apr 11 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
python中(str,list,tuple)基础知识汇总
Feb 20 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
python3中的eval和exec的区别与联系
Oct 10 Python
python 自动识别并连接串口的实现
Jan 19 Python
使用python对excel表格处理的一些小功能
Jan 25 Python
详解Pymongo常用查询方法总结
Jan 29 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
python的变量和简单数字类型详解
Sep 15 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 #Python
python实现126邮箱发送邮件
May 20 #Python
python3.6使用SMTP协议发送邮件
May 20 #Python
Python操作Excel把数据分给sheet
May 20 #Python
python3通过qq邮箱发送邮件以及附件
May 20 #Python
学会python自动收发邮件 代替你问候女友
May 20 #Python
Django中ORM找出内容不为空的数据实例
May 20 #Python
You might like
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
桌面中心(四)数据显示
2006/10/09 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
php之可变函数的实例详解
2017/09/13 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
javascript getElementsByClassName函数
2010/04/01 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
微信小程序实现图片压缩
2019/12/03 Javascript
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
Python读取表格类型文件代码实例
2020/02/17 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
教师实习自我鉴定
2013/12/11 职场文书
学校校庆演讲稿
2014/05/22 职场文书
师范毕业生求职信
2014/07/11 职场文书
毕业酒会致辞
2015/07/29 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
股东协议书范本2016
2016/03/21 职场文书
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python