使用 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访问MySQL封装的常用类实例
Nov 11 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
python读取二进制mnist实例详解
May 31 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
django-filter和普通查询的例子
Aug 12 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
python对Excel的读取的示例代码
Feb 14 Python
python实现IOU计算案例
Apr 12 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 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
php创建基本身份认证站点的方法详解
2013/06/08 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
基于Python的文件类型和字符串详解
2017/12/21 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
Python补齐字符串长度的实例
2018/11/15 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
网络安全方面的面试题
2016/01/07 面试题
EJB实例的生命周期
2016/10/28 面试题
大学生大二自我鉴定
2013/10/28 职场文书
安全生产汇报材料
2014/02/17 职场文书
创文明城市标语
2014/06/16 职场文书
党章培训心得体会
2014/09/04 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
获奖感言范文
2015/07/31 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
一文简单了解MySQL前缀索引
2022/04/03 MySQL
Python函数对象与闭包函数
2022/04/13 Python