【问题标题】:How to add an annotation on distinct items?如何在不同的项目上添加注释?
【发布时间】:2011-05-02 04:07:59
【问题描述】:

我有一个问题...

packages = Package.objects.annotate(bid_count=Count('items__bids'))

这应该给我一个包含每个投标数量的包裹列表。如果包裹中只有一件物品,它会很好用,但如果有更多,那就双重计算。

每个包裹包含一件或多件物品。每个投标都针对一个包裹内的一个或多个项目。我想检索对该包裹内物品的出价数量。

如果一个包裹内的 2 件商品有 1 个投标,目前这将计为 2,我希望它返回 1。

我尝试了Count('items__bids__distinct'),但没有奏效。我该怎么做?

【问题讨论】:

标签: django


【解决方案1】:

我遇到了同样的问题,我找到了解决方法:

packages = Package.objects.annotate(bid_count=Count('items__bids', distinct = True))

【讨论】:

  • distinct 参数?!我早就忘记了我想对这个问题做什么,我认为该项目已被放弃......但如果它再次出现!这会很方便。谢谢!
  • 我希望我能给你+1000分。 IRC 上甚至没有人知道如何回答这个问题,这些 kwargs 似乎完全没有文档记录,找出它们存在的唯一方法是从源代码中。
  • 我花了一个小时尝试不同的可能解决方案!我检查了 django.db.models.aggregates.py 中的聚合定义并看到了签名 __init__(self, lookup, **extra),但后来我找不到任何关于如何使用那些命名的额外参数的文档,当然这就是答案!为什么没有记录在案!?
  • 如果我们有distinct('id'),我们会怎么做?
  • 只有我偶尔会收到NotImplementedError('annotate() + distinct(fields) is not implemented.')类似的查询吗?
猜你喜欢
  • 1970-01-01
  • 2012-07-13
  • 2014-03-30
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
相关资源
最近更新 更多