使用 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的内存泄漏及gc模块的使用分析
Jul 16 Python
Python实现的ini文件操作类分享
Nov 20 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
python下setuptools的安装详解及No module named setuptools的解决方法
Jul 06 Python
python中的break、continue、exit()、pass全面解析
Aug 05 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
Python调用C语言的实现
Jul 26 Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
pandas apply多线程实现代码
Aug 17 Python
python numpy中multiply与*及matul 的区别说明
May 26 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 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 CLI模式下的多进程应用分析
2013/06/03 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
实例讲解php数据访问
2016/05/09 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
Python标准库与第三方库详解
2014/07/22 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
python常见排序算法基础教程
2017/04/13 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
最新个人职业生涯规划书
2014/01/22 职场文书
中学清明节活动总结
2014/07/04 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
2014年仓库工作总结
2014/11/20 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
学生会招新宣传语
2015/07/13 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
什么是SOLID
2022/03/24 Javascript