使用 django orm 写 exists 条件过滤实例
作者:xufwind 发布时间:2022-01-20 02:42:48
标签:django,orm,exists,过滤
要用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')
第二步很重要
来源:https://blog.csdn.net/xufwind/article/details/86476597


猜你喜欢
- 1.DNS查询过程:以查询 www.baidu.com为例(1)电脑向本地域名服务器发送解析www.baidu.com的请求(2)本地域名服
- IF Exists(Select 1 From sysobjects Where Name='sp_search' And
- 微信小程序组件设计规范组件化开发的思想贯穿着我开发设计过程的始终。在过去很长一段时间里,我都受益于这种思想。组件可复用 - 减少了重复代码量
- 需要使用到的文件wxapp.py, read_file.py, setup.py#!/usr/bin/env python# -*- cod
- 本文假设你在 GitHub 上已经有一个想要打包和发布的项目。第 0 步:获取项目许可证在做其他事之前,由于你的项目要开源,因此应该有一个许
- 示例如下:<script> //函数: 反复执行的代码块 //全局只有一个对
- 这篇文章讨论了Python的from <module> import *和from <package> import
- 前言本文将介绍如何使用ONNX将PyTorch中训练好的模型(.pt、.pth)型转换为ONNX格式,然后将其加载到Caffe2中。需要安装
- 从去年六一儿童节的LOGO开始,我们就要求以后的每一个节日FLASH LOGO设计时除了具备创意故事外,还必须设计一个小的互动效果,当受众把
- 我们在flask的学习中,会难免遇到多对多表的查询,今天我也遇到了这个问题。那么我想了好久。也没有想到一个解决的办法,试了几种方法,可能是思
- 虽然我只是把豆瓣当作一个纪录工具来用,纪录下自己看过的电影、听过的音乐、读过的书籍,我几乎不关注豆瓣上的任何影评、乐评、音衣服之类的内容,但
- 环境:adobe flash CS4,VS2008 , Access2003 实现步骤: 1、创建ASP.net页面 testCommuni
- 执行sql 语句,中间没有用到临时表提示服务器: 消息 9002,级别 17,状态 2,行 1数据库 'tempdb' 的日
- flash param参数和属性下列标记属性和参数描述了由“发布”命令创建的 HTML 代码。在编写自己的用于显示 Flash 内容的 HT
- NumPy's main object is the homogeneous multidimensional array. It
- input() 的用法Python3.x 中input() 函数接受一个标准输入数据,返回为 string 类型。python3将input
- 一,fso.GetFile提取文件相应的 File 对象1,getfile.asp<%whichfile=Serv
- 当数据库的数据量读写频繁的时候,我们就要考虑把数据库的读写分开,以提高数据库的使用效率,(当然还有其他用处比如,备份数据),这个时候我们就要
- 本文实例讲述了Node.js API详解之 Error模块用法。分享给大家供大家参考,具体如下:Node.js API详解之 ErrorNo
- 前言随着Python3的普及,Selenium3也跟上了行程。而Selenium3最大的变化是去掉了Selenium RC,另外就是Webd