使用 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统计单词出现的次数
Apr 04 Python
Python 找到列表中满足某些条件的元素方法
Jun 26 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
python创建属于自己的单词词库 便于背单词
Jul 30 Python
pytorch的batch normalize使用详解
Jan 15 Python
python模拟点击网页按钮实现方法
Feb 25 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 Python
Scrapy中如何向Spider传入参数的方法实现
Sep 28 Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 Python
python Django框架快速入门教程(后台管理)
Jul 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
php导入导出excel实例
2013/10/25 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
php防止sql注入的方法详解
2017/02/20 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
XML的代替者----JSON
2007/07/21 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
Angular.js之作用域scope'@','=','&'实例详解
2017/02/28 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
一个简易的js图片轮播效果
2017/07/22 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
python实现飞机大战
2018/09/11 Python
详解python算法之冒泡排序
2019/03/05 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
中学生学雷锋活动心得体会
2014/03/10 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
少年犯观后感
2015/06/11 职场文书
实践论读书笔记
2015/06/29 职场文书
财产分割协议书
2016/03/22 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书