使用 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编码时应该注意的几个情况
Mar 04 Python
Python实现遍历目录的方法【测试可用】
Mar 22 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
TensorFlow损失函数专题详解
Apr 26 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
python实践项目之监控当前联网状态详情
May 23 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
解决Python对齐文本字符串问题
Aug 28 Python
详解python tkinter模块安装过程
Jan 06 Python
Python json格式化打印实现过程解析
Jul 21 Python
实战Python爬虫爬取酷我音乐
Apr 11 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
python 布尔操作实现代码
2013/03/23 Python
Python获取当前时间的方法
2014/01/14 Python
基于Python实现文件大小输出
2016/01/11 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
pandas ix &iloc &loc的区别
2019/01/10 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
Python xlwt模块使用代码实例
2020/06/10 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
python爬取youtube视频的示例代码
2021/03/03 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
C语言50道问题
2014/10/23 面试题
励志演讲稿范文
2014/04/29 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
感恩教育月活动总结
2014/07/07 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python