2010-10-28 83 views
24

我有一个查询......如何在不同的项目上添加注释?

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

这是应该给我包的列表,每个投标的数量。如果软件包中只有一个项目,它的工作效果很好,但是如果有更多的项目,那么它就是双重计数。

每个包由1个或多个项目组成。每个出价都放在一个包中的一个或多个项目上。我想检索该包装内的物品的出价数量。

如果有1个出价放置在一个封装内2项,目前这种将计为2,我希望它返回1

我想Count('items__bids__distinct'),但没有奏效。我怎样才能做到这一点?

+0

的[注解Django的计数和不同领域]可能的复制(http://stackoverflow.com/questions/13145254/django-注释数与分隔字段) – 2017-04-20 17:55:46

回答

72

我有同样的问题,我在这里找到了解决:http://www.djangofoo.com/182/filter-annotate-count

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

有一个'distinct'参数?!我早已忘记了我正在试图解决这个问题,我认为这个项目已经被放弃......但如果它再次出现!这将很方便。谢谢! – mpen 2011-12-31 00:36:54

+8

我希望我能给你+1000分。 IRC上没有人甚至不知道如何回答这个问题,这些kwargs看起来完全没有记录,找到它们的唯一方法就是源代码。 – John 2012-02-08 23:04:07

+0

我花了一个小时尝试不同的可能的解决方案!我检查了'django.db.models.aggregates.py'中的Aggregate定义,并看到了签名'__init __(self,lookup,** extra)',但是我找不到任何有关如何使用这些命名的额外参数的文档,当然这就是答案!为什么地狱不是这个记录!? – AJJ 2012-06-03 12:12:58