Django:如何查询数组中的所有值?

时间:2016-06-19 18:24:13

标签: django django-queryset

我有一个包含多个值的复选框。例如,hobbies。当用户选择一些hobbies时,他希望看到拥有所有这些爱好的人。

为了清楚起见,我没有详细说明,所以这里是我如何阅读所有已检查的值并将它们放入我的" big"查询,您可能会猜到: q

hobbies2 = [int(l) for l in g.getlist('hobbies2')]
if len(hobbies2):
    q = q & Q(personne__hobbies2__in=hobbies2)

问题在于它会让所有有共同兴趣的人回归(即" or"而不是" and& #34;。)

如何使用and

获取所有那么多个值。

1 个答案:

答案 0 :(得分:1)

__in运算符用于按集合进行过滤。它不适用于在多对多关系中一次检查多个值。

它在SQL中逐字转换为以下内容:

SELECT ... WHERE hobbies IN (1, 3, 4);

因此,您需要使用AND条件构建查询。您可以使用连续过滤器执行此操作:

queryset = Personne.objects.all()

# build up the queryset with multiple filters
for hobby in hobbies2:
    queryset = queryset.filter(hobbies2=hobby)