我有一个的id列表,我需要在Django中查询和过滤(使用and)。我想使用一些类似于下面例子2的东西,但是它给出了不正确的结果0。型号很简单,很多产品可以有很多标签。例2有什么问题?你知道吗
正确的结果
例1:
q = Product.objects.all()
for id in _list_of_ids:
q.filter(tags__id=id)
例2:
结果不正确,但似乎更好(edited for brevity)
。。。你知道吗
for id in _list_of_ids:
q = Q(tags__id=id)
# apend q here etc
# q = (AND: ('tags__id', 1), ('tags__id', 2))
Products.objects.filter(q)
您要搜索的是:
基本上,一个带有多个
Q
对象的.filter
调用和多个带有单个Q
对象的.filter
调用之间是有区别的。你知道吗在第一个场景中,您将得到一个内部联接,其中应用了所有
Q
过滤器。你知道吗在第二个场景中,您得到许多内部连接,每个连接只应用一个
Q
对象。你知道吗在您的例子中,当您搜索一个产品时,有多个标记的组合,您需要为每个标记创建一个内部连接,以便找到这样的产品(这是第二种情况),因此您需要许多
.filter
调用。你知道吗更多信息请参见文档:Spanning multi-valued relationships
例2的完整代码是什么?你知道吗
像这样的事情似乎应该管用。。。你知道吗
相关问题 更多 >
编程相关推荐