Django反向查询集包含列表中的所有值

时间:2014-11-30 22:24:06

标签: django sqlite python-2.7 django-models django-queryset

如果我有:

value_list = [1, 2, 3, 4, 5]

现在我正在表演:

Category.objects.filter(title__values__in=value_list)

但是,Category过滤器会对值列表运行OR操作,因此如果值为12或{{1},则会选择该对象或34

是否有一种简单的方法可以运行5操作,因此会选择包含AND中所有元素的所有Category个对象?

例如。)选择value_list等于Categoriesvalues以及123的所有4。 (澄清一下,这意味着一个5等于value,一个1等于value等等......)

注意:我们在此处运行双向反向查找,首先查看2个对象,然后查看title个对象。

非常感谢任何帮助!

1 个答案:

答案 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)

Q objects here

上的文档