我有一个CartItem
模型,其中包含一个AttributeChoice
模型的ManyToMany字段。例如,CartItem
可以AttributeChoice
“小”和“红色”。
我想找到我的CartItem
,它们都具有“小”和“红”的属性。如果我执行以下操作:
CartItem.objects.get(cart=cart, product=product, attribute__in=attribute_list)
attribute_list
是“小”和“红”的AttributeChoice
个对象列表。然后我也会得到只有“小”或“红色”的物体,但不能同时获得两者。
所以这个查询都匹配:
虽然我想要的是一个只能与CartItem A匹配的查询。
现在......我可以创建很多AND语句,但我需要一个灵活的解决方案,可以包含1或100个要过滤的属性。所以要传递一个对象列表会很棒。
想法?
答案 0 :(得分:8)
The solution to this problem was posted in this thread.
This is how I wrote my query:
CartItem.objects.filter(cart=cart, product=product, attribute__in=attribute_list).annotate(num_attr=Count('attribute')).filter(num_attr=len(attribute_list))