使用 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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
Python脚本实现下载合并SAE日志
Feb 10 Python
在Python的Django框架中创建语言文件
Jul 27 Python
Python实现运行其他程序的四种方式实例分析
Aug 17 Python
对tensorflow 的模型保存和调用实例讲解
Jul 28 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
python实现年会抽奖程序
Jan 22 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
Python 多线程之threading 模块的使用
Apr 14 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 Python
python_tkinter事件类型详情
Mar 20 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让网站移动访问更加友好方法
2019/02/14 PHP
来自qq的javascript面试题
2010/07/24 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
Django自定义用户认证示例详解
2018/03/14 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
python实例化对象的具体方法
2020/06/17 Python
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
《凡卡》教学反思
2014/04/09 职场文书
支行行长竞聘报告
2014/11/06 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
护理培训心得体会
2016/01/22 职场文书
2019年工作总结范文
2019/05/21 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers
python如何读取和存储dict()与.json格式文件
2022/06/25 Python