【发布时间】:2016-11-15 21:42:44
【问题描述】:
编辑:这个问题是对观察到的结果的误解的结果。最初发布但不起作用的 sn-p 解决了该问题。我将把它全部留在下面,以供将来以同样方式感到困惑的任何人使用。
我有两个型号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 中完成吗? 编辑:是的,确实如此 - 请参阅上面的 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)
标签: python django django-queryset django-orm