当前位置: 首页 > 面试题库 >

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

邹博明
2023-03-14
问题内容

我有一个查询,要求准确过滤具有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.


 类似资料:
  • 问题内容: 我有一个查询,要求准确过滤具有ID的2位作者 从理论上讲 这是不可能的。 我怎么解决这个问题? 欢呼声,米奇 问题答案: 起初并不直观,但是答案就摆在我们面前。 如果您想要完全匹配,则可以通过仅具有2个作者的那些项来进一步过滤此结果。 如果您想动态地精确匹配,该如何处理?

  • Eclipse版本:2021-06 (4.20.0)构建id:20210612-2011 Jdk 15.0.2 雄猫8.5.75 Maven 3.8.4 冬眠5.4.22。最终 执行此查询会引发异常: 一个只能有一个,一个可以有很多个s 我认为Structure类的注释映射是错误的,应该是: 而不是这个: 我只需要在运行这个简单的select查询时返回一个对象 任何帮助赞赏。

  • 我在我的spring boot应用程序中出现了这个错误。当我想调用这个存储库时,我遇到了这个错误 这是我的存储库: 这就是我称之为此方法的地方: 如何检查方法返回的结果?我调试了我的代码,但在断点它只是返回这个错误。 谢谢你的帮助。

  • 我在使用spring数据从1对1关系btn表检索数据时遇到了一个问题。我已经回顾了平台上的几个解决方案,但奇怪的是,在问题首次出现之前,我已经实现了所有建议的解决方案。请帮助我找到我所缺少的东西,或是使对他人有用的解决方案对我无效的任何东西。 以下是这两个实体之间的关系 错误消息: 2021-12-23 15:02:42.116错误11144---[nio-8089-exec-5]o.a.c.c.

  • 我有一个实体:与实体:之间的关系如下: QueryParameter实体: HtmlElement实体: 组件实体: 类型实体: 基本上,这里的关系意味着一个html元素有一个与其相关的组件。 现在,当我想要找到如下所示的所有组件时: 它给出了以下错误: 如果我运行生成的查询,它将返回3行,但这没有任何意义,因为Component有不同的html组件(input、select等),并且HtmlEl

  • 在eclipse中调试时 退回申请。isEmpty()?空:应用程序。得到(0); 这些表达式被计算为 applications.is空()- 应用。获取(0)- 应用。大小()- 但在执行这一行之后,它的抛出错误 组织。冬眠HibernateeException:找到了多个具有给定标识符的行:263536, 即使它的大小显示为1,那么它为什么以及如何在执行后获得多行。