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

Django: how to query all values in an array?

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

为了清楚起见,我没有详细介绍,所以这里是我如何读取所有选中的值并将它们放入我的 "big" 查询中,正如您可能猜到的那样:q:

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

问题是 returns 所有有共同爱好的人(即像“or”,而不是“and”)。

如何使用 and 获取所有这些多对多值?

__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)