使用 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处理文本文件实现生成指定格式文件的方法
Jul 31 Python
Python 实现简单的shell sed替换功能(实例讲解)
Sep 29 Python
Pycharm以root权限运行脚本的方法
Jan 19 Python
python儿童学游戏编程知识点总结
Jun 03 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
python使用minimax算法实现五子棋
Jul 29 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
Pycharm小白级简单使用教程
Jan 08 Python
Tensorflow限制CPU个数实例
Feb 06 Python
python读取hdfs上的parquet文件方式
Jun 06 Python
python tkinter实现定时关机
Apr 21 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
php 注释规范
2012/03/29 PHP
php实现求相对时间函数
2015/06/15 PHP
thinkPHP查询方式小结
2016/01/09 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
如何运行Python程序的方法
2013/04/21 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
Python发展简史 Python来历
2019/05/14 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
业务部经理岗位职责
2014/01/04 职场文书
葬礼司仪主持词
2014/03/31 职场文书
节水标语大全
2014/06/11 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏
python​格式化字符串
2022/04/20 Python