在单个相关对象上使用多个条件进行过滤
Filter with multiple conditions on a single related object
编辑:这个问题是对观察结果的误解造成的。最初发布但不起作用的片段解决了这个问题。我将所有内容留给以后以同样方式感到困惑的任何人。
我有两个模型 answer
和 answer_set
。我需要编写一个接受 answer_set
查询集并添加过滤器的函数。
我要应用的过滤器是:answer_set
有一个 answer
,具体为 code
和 value
。
起初我尝试了类似的方法:
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
编辑:这个问题是对观察结果的误解造成的。最初发布但不起作用的片段解决了这个问题。我将所有内容留给以后以同样方式感到困惑的任何人。
我有两个模型 answer
和 answer_set
。我需要编写一个接受 answer_set
查询集并添加过滤器的函数。
我要应用的过滤器是:answer_set
有一个 answer
,具体为 code
和 value
。
起初我尝试了类似的方法:
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