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

时间:2016-07-13 10:40:51

标签: python django django-queryset django-orm

编辑:这个问题是对观察结果误解的结果。最初发布但不工作的片段解决了这个问题。对于将来会以同样的方式感到困惑的任何人,我将其全部留在下面。

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

我要申请的过滤条件是:answer_setanswer个特定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中完成吗? 编辑:是的,确实如此 - 请参阅上面的代码段。

2 个答案:

答案 0 :(得分:3)

编辑:你说的不正确。 filter()函数自动'和'它的参数。请参阅documentation on filter

答案 1 :(得分:1)

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

from django.db.models import Q

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