使用 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 相关文章推荐
浅谈MySQL中的触发器
May 05 Python
Python sys.argv用法实例
May 28 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
python实现移位加密和解密
Mar 22 Python
对python3 sort sorted 函数的应用详解
Jun 27 Python
python版百度语音识别功能
Jul 09 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
keras中的loss、optimizer、metrics用法
Jun 15 Python
解决python3输入的坑——input()
Dec 05 Python
python实现批量移动文件
Apr 05 Python
一篇文章带你了解Python和Java的正则表达式对比
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
利用PHP和AJAX创建RSS聚合器的代码
2007/03/13 PHP
php 动态添加记录
2009/03/10 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
给Python入门者的一些编程建议
2015/06/15 Python
python选择排序算法实例总结
2015/07/01 Python
python 统计代码行数简单实例
2017/05/04 Python
python web框架 django wsgi原理解析
2019/08/20 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
家长学校工作方案
2014/05/07 职场文书
市场策划求职信
2014/08/07 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书