This question already has answers here:
Django filter queryset __in for *every* item in list
(8 个回答)
4年前关闭。
我有一个带有 ManyToMany 字段的
然后我想找到我的
其中
所以这个查询将匹配:
购物车项目 A,小号,红色 CartItem B, 小号 CartItem C, 红色
虽然我想要的是一个只匹配 CartItem A 的查询。
现在...我可以创建很多 AND 语句,但我需要一个灵活的解决方案,可以包含 1 或 100 个要过滤的属性。因此,将对象列表传递给它会很棒。
想法?
(8 个回答)
4年前关闭。
我有一个带有 ManyToMany 字段的
CartItem
模型到一个 AttributeChoice
模型。因此,例如 CartItem
可以有 AttributeChoice
"Small"和 "Red"。然后我想找到我的
CartItem
,它们都具有“小”和“红色”属性。如果我执行以下操作:CartItem.objects.get(cart=cart, product=product, attribute__in=attribute_list)
其中
attribute_list
是“Small”和“Red”的 AttributeChoice
对象列表。然后我也会得到只有“小”或“红色”的对象,但不是两者都有。所以这个查询将匹配:
虽然我想要的是一个只匹配 CartItem A 的查询。
现在...我可以创建很多 AND 语句,但我需要一个灵活的解决方案,可以包含 1 或 100 个要过滤的属性。因此,将对象列表传递给它会很棒。
想法?
最佳答案
此问题的解决方案已发布在 this thread 中。
这就是我编写查询的方式:
CartItem.objects.filter(cart=cart, product=product, attribute__in=attribute_list).annotate(num_attr=Count('attribute')).filter(num_attr=len(attribute_list))
关于python - Django 过滤器,其中 ManyToMany 字段包含所有列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32963210/
10-09 15:55