Django过滤器,其中ManyToMany字段包含所有列表

Mar*_*ind 3 python django

我有一个CartItem带有ManyToMany字段的AttributeChoice模型到模型.例如,a CartItem可以具有AttributeChoice"小"和"红色".

我想找到我的CartItem两个都有"小"和"红"的属性.如果我执行以下操作:

CartItem.objects.get(cart=cart, product=product, attribute__in=attribute_list)
Run Code Online (Sandbox Code Playgroud)

"小"和"红" attribute_listAttributeChoice对象列表在哪里.然后我也会得到只有"小"或"红"的对象,但不是两者.

所以这个查询都匹配:

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

虽然我想要的是一个只能匹配CartItem A的查询.

现在......我可以创建很多AND语句,但我需要一个灵活的解决方案,可以包含1或100个要过滤的属性.所以传递它的对象列表会很棒.

想法?

Mar*_*ind 9

此问题的解决方案已发布在此主题中.

这是我写我的查询的方式:

CartItem.objects.filter(cart=cart, product=product, attribute__in=attribute_list).annotate(num_attr=Count('attribute')).filter(num_attr=len(attribute_list))
Run Code Online (Sandbox Code Playgroud)