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

Filter with multiple conditions on a single related object

编辑:这个问题是对观察结果的误解造成的。最初发布但不起作用的片段解决了这个问题。我将所有内容留给以后以同样方式感到困惑的任何人。

我有两个模型 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 中完成吗? 编辑:是的,确实如此 - 请参阅上面的代码片段。

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

from django.db.models import Q

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

编辑:你说的不对。 filter() 函数自动对其参数进行“与”运算。参见 documentation on filter