如何进行多对多 Django 查询来查找具有 2 个给定作者的书籍?

2024-03-07

我有一个查询,需要使用 ID 精确过滤 2 位作者

理论上,

Book.objects.filter(author__id=1, author__id=2). 

这是不可能的。

我怎么解决这个问题?

干杯, 米奇


一开始并不直观,但答案就在我们面前。

Book.objects.filter(author__id=1).filter(author__id=2)

如果您想要完全匹配,您可以通过那些只有 2 位作者的项目进一步过滤此结果。

Book.objects.annotate(count=Count('author')).filter(author__id=1)\
                .filter(author__id=13).filter(count=2)

如果你想要动态精确匹配,像这样怎么样?:

def get_exact_match(model_class, m2m_field, ids):
    query = model_class.objects.annotate(count=Count(m2m_field))\
                .filter(count=len(ids))
    for _id in ids:
        query = query.filter(**{m2m_field: _id})
    return query

matches = get_exact_match(MyModel, 'my_m2m_field', [1, 2, 3, 4])

# matches is still an unevaluated queryset, so you could run more filters
# without hitting the database.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何进行多对多 Django 查询来查找具有 2 个给定作者的书籍? 的相关文章

随机推荐

  • 使用 sbt 将工件发布到 AWS CodeArtifact

    我正在尝试将工件发布到AWS CodeArtifact using sbt 但我遇到了一些麻烦 给定一个sbt项目 运行命令sbt publish包已上传到存储库 但仍保留在Unfinished状态 AWS CodeArtifact文档 h
  • 在远程机器上递归执行本地定义的python脚本

    我有兴趣编写一个脚本 以便该脚本的唯一副本驻留在我的本地计算机上 但该脚本在远程计算机上执行 可能远程计算机在其他远程计算机上执行该脚本 即 2 个或更多级别的分布式调用树中的递归 实现这一目标的一种方法是一步将脚本复制到远程计算机 然后在
  • ES6:“从'jquery'导入$”真正意味着什么?

    我一开始以为它只是意味着加载 jQuery 模块并在名为 的变量中初始化它 但是 通过将 Atom 与 A tom TypeScript 一起使用 我收到一条错误消息 指出 找不到模块 jquery 尽管所有代码都可以在浏览器中运行 但看起
  • Android - android.os.NetworkOnMainThreadException

    我有这个例外 我正在阅读关于此的线程 它似乎令人困惑 如何修复 android os NetworkOnMainThreadException https stackoverflow com questions 6343166 androi
  • 从 Javascript 对象创建 HTML 标签

    更改此对象的最佳方法是什么 src img jpg title foo 转化为有效的HTML 标签字符串像这样 img src img jpg title foo 解决方案1 使用 jQuery 这很容易 但很复杂 img attr obj
  • DefaultValue 属性反序列化

    我正在尝试将流反序列化为具有默认值属性的对象 并且当流中缺少这些属性时 protobuf net 只是忽略这些属性 在反序列化之前 我是否需要手动将所有属性设置为默认值 The DefaultValues行为 不仅仅是在 protobuf
  • StreamContent 和 ByteArrayContent webApi 的差异

    我在整个网络上进行了搜索 但找不到答案 我们的应用程序中有两种方法 a 第一个返回HttpResponseMessage里面有 1 个文件 它用StreamContent response Content new StreamContent
  • Javascript 中箭头函数(粗箭头=>)的确切解析优先级是什么?

    我遇到了一个例子eslint 文档 https eslint org docs rules no confusing arrow关于箭头函数 The intent is not clear var x a gt 1 2 3 所以我对箭头函数
  • 禁用 pylon 中的浏览器缓存

    我有一个操作 json 从服务器返回 json 不幸的是 在 IE 中 浏览器喜欢缓存这个 json 我怎样才能使该操作不缓存 确保您的响应标头具有 Cache Control no cache Pragma no cache Expire
  • 如何在 MySQL 中向值附加回车符?

    我正在导入一些餐厅信息 但发现我缺少描述字段中的菜肴类型 如何在值后面附加回车符 这就是我到目前为止所拥有的 我希望菜肴能换上新的路线 select concat field id 20 r french from table 如果您想要一
  • 使用 POI jar 获取 Excel SheetNames

    我需要使用 POI jar 的所有 Excel 工作表名称 所有包含数据的内容 像 jxl jar getSheetNames 你没有说你想要什么 所以我会猜测一个清单 您只需要迭代工作表索引 获取每个索引的名称 你的代码会是这样的 Fil
  • Selenium IDE 和 xpath - 在表中查找文本/行并选择单选框

    我一直在使用 Selenium IDE 并取得了一些不错的结果 我已经阅读了很多有关跟随兄弟姐妹和先前兄弟姐妹的内容 但我找不到正确的单选按钮 本质上 我想在表中找到带有 测试 一词的行 然后单击单元格中的单选按钮 到目前为止我可以找到输入
  • 如何将逗号分隔的字符串转换为列表?

    Java 中是否有任何内置方法允许我们将逗号分隔的字符串转换为某个容器 例如数组 列表或向量 或者我需要为此编写自定义代码吗 String commaSeparated item1 item2 item3 List
  • 希伯来语问题 - MySql,c#

    我在将希伯来语字符串插入 MySql 时遇到问题 介绍 我将MySql设置为Utf8 我将表设置为字符集 utf8 排序规则为 uft8 general ci 我将连接字符串设置为 Server 数据库 Uid Pwd 字符集 utf8 我
  • 打包一个可运行的 JPA jar,将 persistence.xml 放在外面

    我想将我的 jpa swing 项目导出到可运行的 jar 中 但我希望 persistence xml 位于 jar 之外而不是打包在里面 这样我就可以更改它 而无需在每次配置后再次导出 jar 根据 JPA 规范 persistence
  • ios - 多个导航控制器之间的导航

    我试图理解使用 和不使用 NavigationController 在 ViewController 之间导航的行为 并且在阅读文章和文档时我误解了一些事情 所以我决定问他们 主要问题是 如果故事板中有多个导航控制器并且想要从一个导航控制器
  • cython 做了哪些 numpy 优化?

    我有点惊讶地发现 fast ops c pyx cimport cython cimport numpy as np cython boundscheck False turn off bounds checking for entire
  • C++ 打印指针的值

    我有一个双指针数组 但每次我尝试打印其中一个值时 都会打印地址 如何打印实际值 cout 有人知道吗 如果它确实是一个 初始化的 双指针数组 即 double arr Initialize individual values 所有你需要的是
  • UIDatePicker设置最小和最大小时

    如何设置 UIDatePicker 的最小和最大小时 到底有可能吗 我知道如何设置最小和最大日期 datePicker setMinimumDate 今天 datePicker setMaximumDate nextMonthDay 我想要
  • 如何进行多对多 Django 查询来查找具有 2 个给定作者的书籍?

    我有一个查询 需要使用 ID 精确过滤 2 位作者 理论上 Book objects filter author id 1 author id 2 这是不可能的 我怎么解决这个问题 干杯 米奇 一开始并不直观 但答案就在我们面前 Book