使用 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实现抓取网页并且解析的实例
Sep 20 Python
详解使用python的logging模块在stdout输出的两种方法
May 17 Python
python机器学习理论与实战(二)决策树
Jan 19 Python
利用python修改json文件的value方法
Dec 31 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
python分别打包出32位和64位应用程序
Feb 18 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 Python
Python anaconda安装库命令详解
Oct 16 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去除重复字的实现代码
2011/09/16 PHP
PHP $_FILES中error返回值详解
2014/01/30 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
javascript打印输出json实例
2013/11/11 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
详解如何减少python内存的消耗
2019/08/09 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
生死抉择观后感
2015/06/09 职场文书
教学反思怎么写
2016/02/24 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
python元组打包和解包过程详解
2021/08/02 Python
MySQL RC事务隔离的实现
2022/03/31 MySQL