2015-10-06 99 views
2

我有一个CartItem模型与ManyToMany字段AttributeChoice模型。因此,例如CartItem可以有AttributeChoice“小”和“红”。Django过滤器其中ManyToMany字段包含所有的列表

我想然后找到我的CartItem,它们都具有属性“小”和“红色”。如果我做到以下几点:

CartItem.objects.get(cart=cart, product=product, attribute__in=attribute_list) 

哪里attribute_listAttributeChoice对象的“小”和“红”的列表。然后我也会得到只有“小”或“红”的物体,但不是两者都有。

所以这条查询都匹配:

  • CartItem A,小,红
  • CartItem B,小
  • CartItem C,红

而我要的是一个查询这只会匹配CartItem A.

现在...我可以创建很多AND语句,但我需要一个解决方案,我灵活,可以包含1或100个属性进行过滤。所以要通过它的对象列表将是很好的。

想法?

+0

请出示您的模型类 – Pynchia

+1

mfcovington是正确的。有一个重复的问题以不同的方式形成了正确的答案。我将在下面发布答案。 –

回答

2

此问题的解决办法张贴在this thread

这是我写我的查询:

CartItem.objects.filter(cart=cart, product=product, attribute__in=attribute_list).annotate(num_attr=Count('attribute')).filter(num_attr=len(attribute_list)) 
相关问题