当前位置: 首页 > news >正文

【Django】执行查询—跨关系查询中的跨多值关联问题

跨多值查询

跨越 ManyToManyField 或反查 ForeignKey (例如从 Blog 到 Entry )时,对多个属性进行过滤会产生这样的问题:是否要求每个属性都在同一个相关对象中重合。

filter()

先看filter(),通过一个例子看:

from datetime import datefrom django.db import modelsclass Blog(models.Model):name = models.CharField(max_length=100)tagline = models.TextField()def __str__(self):return self.nameclass Entry(models.Model):blog = models.ForeignKey(Blog, on_delete=models.CASCADE)headline = models.CharField(max_length=255)body_text = models.TextField()pub_date = models.DateField()# 其他字段省略...def __str__(self):return self.headline

假设Entry模型对应的表数据如下

Entry模型对应的表

# 要选择所有包含 2008 年至少一个标题中有 "Lennon" 的条目的博客(满足两个条件的同一条目)
>>> Blog.objects.filter(entry__headline__contains="Lennon", entry__pub_date__year=2008)
<QuerySet [<Blog: Beatles Blog>]>
# 要执行一个更为宽松的查询,选择任何只在标题中带有 "Lennon" 的条目和 2008 年的条目的博客
>>> Blog.objects.filter(entry__headline__contains="Lennon").filter(entry__pub_date__year=2008)
<QuerySet [<Blog: Beatles Blog>, <Blog: Beatles Blog>, <Blog: Pop Music Blog]>

这个结果看起来有点怪,官方文档的解释是由于第二个(更宽松的)查询链接了多个过滤器,它对主模型进行了多次连接,可能会产生重复的结果。
下面是其他网友的解释,可以参考

如果使用多个filter函数,单个函数接收单个条件,采用链式调用的方式来查询,则先过滤第一个查询条件,其返回的是QuerySet对象,注意:由于是跨关联关系查询,我们时刻要清除自己检索的是什么,这里我们检索的是Blog对象,而不是Entry对象,所以第一个过滤器返回的QuerySet内包含的也是Blog对象,而不是Entry对象。然后在此QuerySet基础上继续跨关联关系查询第二个过滤条件,如果返回的Blog对象关联的Entry对象中有满足过滤器条件的Entry,则将该Blog对象添加到返回的Queryset中
https://www.cnblogs.com/fu-9/p/14645330.html

exclude()

一次 exclude() 调用的条件并不需要指向同一项目。
还是用上面entry的数据。
例如,以下查询会排除那些 【关联条目标题包含"Lennon" 的博客】和【发布于 2008 年的博客】,查询结果是空:

>>> Blog.objects.exclude(
... 	entry__headline__contains="Lennon",
... 	entry__pub_date__year=2008,)
<QuerySet []>

如果要排除【关联条目标题包含"Lennon"且发布于2008年的博客】,查询结果是id为2的blog。

>>> Blog.objects.exclude(
...     entry__in=Entry.objects.filter(
...         headline__contains="Lennon",
...         pub_date__year=2008,
...     ),
... )
<QuerySet [<Blog: Pop Music Blog>]>

相关文章:

【Django】执行查询—跨关系查询中的跨多值关联问题

跨多值查询 跨越 ManyToManyField 或反查 ForeignKey &#xff08;例如从 Blog 到 Entry &#xff09;时&#xff0c;对多个属性进行过滤会产生这样的问题&#xff1a;是否要求每个属性都在同一个相关对象中重合。 filter() 先看filter()&#xff0c;通过一个例子看&#xf…...

Spring八股 常见面试题

什么是Spring Bean 简单来说&#xff0c;Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象&#xff0c;这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。 将一个类声明为 Bean 的注解有哪些? Com…...

今年面试潮,说实话这个开发岗能不能冲?

自打华为 2019 年发布鸿蒙操作系统以来&#xff0c;网上各种声音百家争鸣。尤其是 2023 年发布会公布的鸿蒙 4.0 宣称不再支持 Android&#xff0c;更激烈的讨论随之而来。 当下移动端两大巨头瓜分了绝大部分市场&#xff1a; iOS 是闭源的&#xff0c;只有唯一的一家厂商&am…...

【前端素材】推荐优质在线花卉商城电商网页Flowery平台模板(附源码)

一、需求分析 1、系统定义 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台&#xff0c;用户可以在该平台上浏览、选择和购买各种花卉产品。 2、功能需求 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台&#xff0c;用户可以在该平台上浏览、选…...

★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树

★【递归前序】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树:star:思路分析递归解法 105. 从前序与中序遍历序列构造二叉树递归解法 凡是构造二叉树>>>>>>>>&…...

linux检测和重启python脚本

#!/bin/bash# 检测Flask应用是否挂了 if ! pgrep -f "flask_app.py" >/dev/null; then# 重启Flask应用cd /path/to/your/flask/appnohup python3 flask_app.py >/dev/null 2>&1 & fi这是一个简单的bash脚本&#xff0c;用于检测Flask应用是否挂掉&a…...

HTML+CSS+JS:花瓣登录组件

效果演示 实现了一个具有动态花朵背景和简洁登录框的登录页面效果。 Code <section><img src"./img/background.jpeg" class"background"><div class"login"><h2>Sign In</h2><div class"inputBox"…...

Unity中URP下实现水体(水面反射)

文章目录 前言一、原理1、法一&#xff1a;使用立方体纹理 CubeMap&#xff0c;作为反射纹理使用2、法二&#xff1a;使用反射探针生成环境反射图&#xff0c;所谓反射的采样纹理 二、实现水面反射1、定义和申明CubeMap2、反射向量需要什么3、计算 N ⃗ \vec{N} N 4、计算 V ⃗…...

基于FastJson实现Json数据文件导入导出解析

哈喽&#xff0c;大家好&#xff0c;我是灰小猿&#xff0c;一个超会写bug的程序猿&#xff01; 今天来记录一个在项目实战中比较实用的方法&#xff0c;主要是针对一些需要存在简单数据文件导入导出的场景&#xff0c;如&#xff1a;数据文件的简单备份、软件升版前后配置导入…...

JVM内存分配与垃圾收集流程

3.8 实战&#xff1a;内存分配与回收策略 3.8.1 对象优先在Eden分配 大多数情况下&#xff0c;对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时&#xff0c;虚拟机将发起一次Minor GC。 3.8.2 大对象直接进入老年代 HotSpot虚拟机提供了-XX&#xff1a;Prete…...

【python】yaml转成json

姊妹篇&#xff1a;【python】json转成成yaml yaml数据&#xff1a; address:city: 北京市postalCode: 100000street: 北京路123号 age: 30 cart: - product:name: 笔记本电脑price: 1199.99quantity: 2 - product:name: 智能手机price: 599.99quantity: 1 children: - age: …...

css5定位

css 一.定位1.概念&#xff08;定位定位模式边位移&#xff09;2.静态位移static&#xff08;不常用&#xff09;3.相对定位relative&#xff08;不脱标&#xff09;&#xff08;占位置&#xff09;4.绝对定位absolute&#xff08;脱标&#xff09;&#xff08;不占位置&#x…...

【解决】修改 UI界面渲染层级 的常见误区

开发平台&#xff1a;Unity 2021版本   问题描述 Unity 中管理 UI 上显示元素的前后层级关系大致为以下两种方式&#xff1a; 方式一&#xff1a;修改UI元素队列顺序与层级方式二&#xff1a;使用 Canvas 组件中的 Override Sort 属性配置 方式二 对应复杂的 UI 层级关系将常…...

蓝桥杯练习系统(算法训练)ALGO-995 24点

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 24点游戏是一个非常有意思的游戏&#xff0c;很流行&#xff0c;玩法很简单&#xff1a;给你4张牌&#xff0c;每张牌上有数…...

汽车电子笔记:BootLoader升级过程疑难问题解决方式(Bootloader响应10 02 + 刷死拯救机制)

目录 1、概述 2、如何在BootLoader响应10 02 2.1、实现流程图 2.2、实现方式(代码思路) 3、刷死拯救机制(100%能救活,适配各类控制器...

高级RAG:揭秘PDF解析

原文地址&#xff1a;https://pub.towardsai.net/advanced-rag-02-unveiling-pdf-parsing-b84ae866344e 2024 年 2 月 3 日 附加内容&#xff1a;揭秘PDF解析&#xff1a;如何从科学pdf论文中提取公式 对于RAG&#xff0c;从文档中提取信息是一个不可避免的场景。确保从源头…...

Android之UI Automator框架源码分析(第九篇:UiDevice获取UiAutomation对象的过程分析)

前言 学习UiDevice对象&#xff0c;就需要看它的构造方法&#xff0c;构造方法中有UiDevice对象持有一些对象&#xff0c;每个对象都是我们分析程序的重点&#xff0c;毕竟UiDevice对象的功能&#xff0c;依赖这些组合的对象 备注&#xff1a;当前对象持有的对象&#xff0c;初…...

【C语言】指针初阶2.0版本

这篇博文我们来继续学习指针的其他内容 指针2.0 传值调用与传址调用传值调用传址调用 一维数组与指针理解数组名使用指针深入理解一维数组 二级指针指针数组二维数组与指针 传值调用与传址调用 在开始之前&#xff0c;我们需要先了解这个概念&#xff0c;后面才能够正常的学习…...

小红书关键词爬虫

标题 1 统计要收集的关键词&#xff0c;制作一个文件夹2 爬取每一页的内容3 爬取标题和内容4 如果内容可以被查看&#xff0c;爬取评论内容5 将结果进行汇总&#xff0c;并且每个帖子保存为一个json文件&#xff0c;具体内容6 总结 1 统计要收集的关键词&#xff0c;制作一个文…...

网络爬虫的危害,如何有效的防止非法利用

近年来&#xff0c;不法分子利用“爬虫”软件收集公民隐私数据案件屡见不鲜。2023年8月23日&#xff0c;北京市高级人民法院召开北京法院侵犯公民个人信息犯罪案件审判情况新闻通报会&#xff0c;通报侵犯公民个人隐私信息案件审判情况&#xff0c;并发布典型案例。在这些典型案…...

STM32G474内部FLASH数据管理实战:从原理到IAP应用

1. STM32G474内部FLASH架构解析 STM32G474系列微控制器搭载了512KB容量的内部FLASH存储器&#xff0c;采用创新的双Bank设计架构。我第一次拿到芯片手册时&#xff0c;发现这个双Bank结构特别有意思——它把512KB空间平均分成两个256KB的Bank&#xff0c;每个Bank又细分为128个…...

百度网盘直链解析:三步实现免会员高速下载的完整方案

百度网盘直链解析&#xff1a;三步实现免会员高速下载的完整方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度而苦恼吗&#xff1f;你是否也遇到过…...

[FPGA]Spartan6 Uart固定波特率读写JY901P惯导模块

这版本是固定波特率&#xff0c;无法修改串口波特率&#xff0c;无法恢复出厂设置&#xff08;出厂设置会更改波特率到9600&#xff0c;除非固定波特率一开始设置为9600&#xff0c;其他写命令都可以成功写入&#xff09;。 1. JY901P交互协议 这个是JY901P惯导模块串口的交互…...

从DDR4到DDR5,我的PCB布线避坑血泪史:信号、电源、时序一个都不能错

从DDR4到DDR5的PCB设计实战&#xff1a;一位工程师的避坑指南 第一次拿到DDR5的设计需求时&#xff0c;我自信满满地以为这不过是DDR4的"小升级版"。直到项目进入调试阶段&#xff0c;那些诡异的信号完整性问题、莫名其妙的时序错误和电源噪声导致的随机崩溃&#xf…...

跨模型、跨Agent、跨时序的追踪难题全解析,深度解读分布式因果推断追踪协议v2.1

第一章&#xff1a;AIAgent架构全链路追踪方案 2026奇点智能技术大会(https://ml-summit.org) AI Agent系统具备多阶段决策、工具调用、记忆检索与外部服务协同等复杂行为特征&#xff0c;传统基于HTTP请求的链路追踪&#xff08;如OpenTracing&#xff09;难以准确刻画其内部…...

手把手教你解决CMake升级后的CMAKE_ROOT错误(Ubuntu环境)

手把手教你解决CMake升级后的CMAKE_ROOT错误&#xff08;Ubuntu环境&#xff09; 在Ubuntu系统上进行CMake版本升级时&#xff0c;不少开发者会遇到一个令人头疼的错误提示&#xff1a;CMake Error: Could not find CMAKE_ROOT !!!。这个错误通常发生在升级过程中新旧版本混用或…...

为什么92%的企业AI团队还没部署多模态翻译?2026奇点大会公布的5个硬件兼容性陷阱必须今天避开

第一章&#xff1a;2026奇点智能技术大会&#xff1a;多模态翻译系统全景洞察 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点智能技术大会上&#xff0c;多模态翻译系统成为核心议题之一。该系统不再局限于文本到文本的转换&#xff0c;而是深度融合语音、图像、手…...

Windows环境下IDEA集成Java与Protobuf的高效开发指南

1. 环境准备&#xff1a;Protobuf与IDEA的安装配置 在Windows系统下搭建Java与Protobuf的开发环境&#xff0c;就像组装一台高性能电脑——每个部件都要选对型号、正确安装。我经历过无数次环境配置的翻车现场&#xff0c;这里把最稳妥的配置方案分享给你。 首先去Protobuf的…...

SketchBook Pro

链接&#xff1a;https://pan.quark.cn/s/85dd8e9388c6 SketchBook Pro是一款功能强大的绘画软件&#xff0c;能够帮助用户轻松进行各种绘画工作&#xff0c;提供了铅笔、橡皮、笔刷、颜色、图层、记号笔等功能&#xff0c;让绘画更加轻松。其界面新颖动人&#xff0c;功能强大…...

RK3566调试手记:当IMX586摄像头遇上EDP屏,我是如何排查‘有图无显’问题的

RK3566调试手记&#xff1a;IMX586摄像头与EDP屏的"有图无显"问题全解析 当你在RK3566平台上成功驱动了IMX586摄像头&#xff0c;通过v4l2工具能抓取到YUV数据&#xff0c;却发现EDP屏幕一片漆黑时&#xff0c;这种"有图无显"的困境确实令人抓狂。作为一名…...