【问题标题】:Django filter where ManyToMany field contains ALL of list [duplicate]Django过滤器,其中ManyToMany字段包含所有列表[重复]
【发布时间】:2016-01-02 23:19:39
【问题描述】:

我有一个带有 ManyToMany 字段的 CartItem 模型到 AttributeChoice 模型。例如,CartItem 可以有 AttributeChoice“小”和“红色”。

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

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

其中attribute_listAttributeChoice“小”和“红色”对象的列表。然后我也会得到只有“小”或“红色”的对象,但不能同时有。

所以这个查询都会匹配:

  • CartItem A,小号,红色
  • 购物车项目 B,小号
  • 购物车项目 C,红色

而我想要的是只匹配 CartItem A 的查询。

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

想法?

【问题讨论】:

  • 请展示您的模型类
  • mfcovington 是正确的。有一个重复的问题以不同的方式形成,但答案正确。我也会在这里发布答案。

标签: python django


【解决方案1】:

此问题的解决方案已发布在this thread

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

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

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 2018-06-19
    • 2021-06-07
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多