2010-10-28 86 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