如果我有:
value_list = [1, 2, 3, 4, 5]
现在我正在表演:
Category.objects.filter(title__values__in=value_list)
但是,Category
过滤器会对值列表运行OR
操作,因此如果值为1
或2
或{{1},则会选择该对象或3
或4
。
是否有一种简单的方法可以运行5
操作,因此会选择包含AND
中所有元素的所有Category
个对象?
例如。)选择value_list
等于Categories
和values
以及1
和2
和3
的所有4
。 (澄清一下,这意味着一个5
等于value
,一个1
等于value
等等......)
注意:我们在此处运行双向反向查找,首先查看2
个对象,然后查看title
个对象。
非常感谢任何帮助!
答案 0 :(得分:2)
是的,为此目的,您拥有用于复杂查找的Q
个对象
from django.db.models import Q
qs = Category.objects.filter(reduce(operator.and_, (Q(title__values=x) for x in value_list))
这相当于说(基本上是一种说法相同的更冗长的方式):
query = None
for x in values_list:
if not query:
query = Q(title__values=x)
else:
query &= Q(title__values=x)
qs = Category.objects.filter(query)
上的文档