在单个相关对象上使用多个条件进行过滤[关闭]

Posted

技术标签:

【中文标题】在单个相关对象上使用多个条件进行过滤[关闭]【英文标题】:Filter with multiple conditions on a single related object [closed] 【发布时间】:2016-11-15 21:42:44 【问题描述】:

编辑:这个问题是对观察到的结果的误解的结果。最初发布但不起作用的 sn-p 解决了该问题。我将把它全部留在下面,以供将来以同样方式感到困惑的任何人使用。

我有两个型号answeranswer_set。我需要编写一个函数来接受answer_set 查询集并添加一个过滤器。

我要应用的过滤器是:answer_set 有一个 answer 和特定的 codevalue

起初我尝试了类似的方法:

q.filter(answer__code=code, answer__value=value)

但这当然行不通——这是两个独立的答案(SQL 中的两个连接),即如果有一些答案具有正确的代码,而另一个答案具有正确的值,则过滤条件为真。 我想检查是否有一个答案同时满足这两个条件。 编辑:这段代码实际上完全符合我的要求。

在 SQL 中这很容易:

...
JOIN answer
...
WHERE
...
answer.value = "some_value" AND answer.code = "some_code"

但我认为原始 SQL 是最后的手段。可以在 Django ORM 中完成吗? 编辑:是的,确实如此 - 请参阅上面的 sn-p。

【问题讨论】:

向我们展示模型以及如何构建查询。使用.filter(answer__code=code, answer__value=value).filter(answer__code=code).filter(answer__value=value) 真的很重要。第二种方法应该像您描述的那样(两个内部连接),但第一种应该使用单个连接。 看来整个问题可能是基于无效的假设(正在进行检查)。 是的,实际上我在问题中发布的 sn-p 确实有效,实际上是 PEBKAC。我将在一分钟内更新问题... 我对其进行了测试,结果与您最初的要求相同。不是你编辑的。我不得不绕过第二行,就像这样answers = Answer.objects.filter(code=code, value=value)q.filter(answer__in=answers) 【参考方案1】:

编辑:你说的不正确。 filter() 函数自动“与”它的参数。见documentation on filter

【讨论】:

【参考方案2】:

您可以使用 Q 对象来处理更复杂的查询。 见django docs about Q objects

from django.db.models import Q

q.filter(
    Q(answer__code=code) & Q(answer__value=value)
)

【讨论】:

以上是关于在单个相关对象上使用多个条件进行过滤[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤具有多个条件的托管对象实体

在Javascript中按多个条件过滤数组

使用 dplyr 过滤 postgreSQL 数据库中的多个值

wireshark常用过滤规则

Ionic 4 按多个值过滤 JSON

使用带有多个语句的 data.table 进行条件过滤