使用 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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
Python字符串和文件操作常用函数分析
Apr 08 Python
python使用reportlab实现图片转换成pdf的方法
May 22 Python
让Python代码更快运行的5种方法
Jun 21 Python
Django卸载之后重新安装的方法
Mar 15 Python
在Pycharm中执行scrapy命令的方法
Jan 16 Python
python web框架 django wsgi原理解析
Aug 20 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
Jan 14 Python
Python requests设置代理的方法步骤
Feb 23 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
Jun 21 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
javascript 触发事件列表 比较不错
2009/09/03 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
DOM 高级编程
2015/05/06 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
Python struct模块解析
2014/06/12 Python
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
python在文本开头插入一行的实例
2018/05/02 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
python不同版本的_new_不同点总结
2020/12/09 Python
人力资源管理毕业生自荐信
2013/11/21 职场文书
高三毕业生自我鉴定
2013/12/20 职场文书
自查自纠工作总结
2014/10/15 职场文书
父母教会我观后感
2015/06/17 职场文书
升学宴来宾致辞
2015/07/27 职场文书
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android