我有一个包含多个值的复选框。例如,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
答案 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)