使用 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中的日志模块logging
Jun 19 Python
Python引用模块和查找模块路径
Mar 17 Python
Python 编码处理-str与Unicode的区别
Sep 06 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Python实现的排列组合计算操作示例
Oct 13 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
Jan 09 Python
python+mysql实现教务管理系统
Feb 20 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
Python2与Python3的区别详解
Feb 09 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 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
Zerg建筑一览
2020/03/14 星际争霸
YB217、YB235、YB400浅听
2021/03/02 无线电
基于header的一些常用指令详解
2013/06/06 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
PDO::_construct讲解
2019/01/27 PHP
PHP chop()函数讲解
2019/02/11 PHP
新手入门常用代码集锦
2007/01/11 Javascript
flash 得到自身url参数的代码
2009/11/15 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
vue cli3适配所有端方案的实现
2020/04/13 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
python中使用zip函数出现错误的原因
2018/09/28 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
《明天,我们毕业》教学反思
2014/04/24 职场文书
防火标语大全
2014/10/06 职场文书
治庸问责工作总结
2015/08/11 职场文书