使用 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的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
Python常用模块之requests模块用法分析
May 15 Python
Python实现井字棋小游戏
Mar 09 Python
如何写python的配置文件
Jun 07 Python
scrapy头部修改的方法详解
Dec 06 Python
用python画城市轮播地图
May 28 Python
变长双向rnn的正确使用姿势教学
May 31 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引用(&)
2014/09/04 PHP
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
python实现用户答题功能
2018/01/17 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
详解python编译器和解释器的区别
2019/06/24 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
python用什么编辑器进行项目开发
2020/06/17 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
在线服装零售商:SheIn
2016/07/22 全球购物
Farnell德国:电子元器件供应商
2018/07/10 全球购物
应届大学生简历中的自我评价
2014/01/15 职场文书
干部行政关系介绍信
2014/01/17 职场文书
自荐信需注意事项
2014/01/25 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js