使用 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在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
python日志记录模块实例及改进
Feb 12 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
PyCharm代码格式调整方法
May 23 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
Django中create和save方法的不同
Aug 13 Python
Python阶乘求和的代码详解
Feb 14 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Python中的全局变量如何理解
Jun 04 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
B2K与车机的中波PK
2021/03/02 无线电
YB217、YB235、YB400浅听
2021/03/02 无线电
第二节--PHP5 的对象模型
2006/11/16 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
js类中获取外部函数名的方法
2007/08/19 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
vue实现页面切换滑动效果
2020/06/29 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
python绘制双柱形图代码实例
2017/12/14 Python
答题辅助python代码实现
2018/01/16 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
小学教师师德反思
2014/02/03 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android