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

sba*_*ski 6 python django django-orm django-queryset

编辑:这个问题是对观察到的结果的误解的结果。最初发布但不起作用的代码段解决了问题。我将把这一切都留给未来任何以同样方式感到困惑的人。

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

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

起初我尝试了类似的东西:

q.filter(answer__code=code, answer__value=value)
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用 - 这是两个单独的答案(SQL 中的两个连接),即如果某个答案具有正确的代码,而另一个具有正确的值,则过滤条件为真。我想检查是否有一个满足这两个条件的答案。编辑:这段代码实际上正是我想要的。

在 SQL 中,这很容易:

...
JOIN answer
...
WHERE
...
answer.value = "some_value" AND answer.code = "some_code"
Run Code Online (Sandbox Code Playgroud)

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

Wou*_*ter 4

编辑:你说的不正确。该filter()函数自动对其参数进行“与”运算。请参阅有关过滤器的文档