使用 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统计文件中去重后uuid个数的方法
Jul 30 Python
Django的信号机制详解
May 05 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
Python实现通讯录功能
Feb 22 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 Python
Django框架获取form表单数据方式总结
Apr 22 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
Pandas的Apply函数具体使用
Jul 21 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 Python
requests在python中发送请求的实例讲解
Feb 17 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 header Content-Type类型小结
2011/07/03 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
验证码按回车不变解决方法
2013/03/29 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
2017/01/21 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
Vuex 入门教程
2018/01/10 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
[00:10]神之谴戒
2019/03/06 DOTA
Python中scatter函数参数及用法详解
2017/11/08 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
Scrapy实现模拟登录的示例代码
2021/02/21 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
《乞巧》教学反思
2014/02/27 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
班主任寄语大全
2014/04/04 职场文书
2015年公司工作总结
2015/04/25 职场文书
《春酒》教学反思
2016/02/22 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python