2014-05-02 44 views
2

這似乎是一個很常見的情景,所以我真的希望有人可以爲我快速回答。在Django中,我如何在單個查詢中獲得基於不同字段值的總行數?

考慮一下我有多個站點和多個公司,我正在爲其收集線索。所以我有一個鉛表,其中,每個記錄包含以下字段:日期網站公司(鉛可以去多家公司),用戶評論。現在我需要生成一個摘要,給出每個公司在每個網站上每個日期獲得的潛在客戶總數。

所以基本上我需要一個查詢,它會給我每個網站上每個公司的總行數。這甚至有可能在單個查詢中完成嗎?

或者,我們可以輕鬆地遍歷網站,在這種情況下,我們只需要計算屬於每個公司的行數,並給定特定的網站。

欣賞任何想法。這裏有一個樣品模型一起工作:

class Lead(models.Model): 
    date = models.DateTimeField(auto_now_add=True) 
    site = models.ForeignKey(Site) 
    companies = models.ManyToManyField(Company) 
    user = models.ForeignKey(User) 
    comment = models.TextField() 
+1

發佈您的模型定義真的有幫助。謝謝。 – alecxe

回答

3

所以我一直在擺弄這個,我相信我已經想出了一個解決方案來產生我所追求的結果。鑑於上面的模型中,我使用了以下內容:

Lead.objects.values('site', 'companies').annotate(Count('id')) 

這就產生一個字典列表,每個獨立的網站/公司組合一個字典,每個包含包含行的總數量id__count關鍵網站和公司的特定組合。如果一位主管擁有多個與之相關的公司,則會爲每個公司生成一個單獨的字典。

在我們的實際模型中,我們有不同類型的引線以及一個附加字段類型。所以,如果我要考慮到這一點爲好,我只想一個字段添加到模型,並使用以下命令:

Lead.objects.values('site', 'companies', 'type').annotate(Count('id')) 

利用這一點,我會得到一個解釋每個站點,每個類型,每家公司,每家都有自己的數量。 Django非常聰明!

無論如何,我確定的基本問題,但我無法找到任何解決它的問題。希望這可以幫助某人。

2

可以使用distinct查詢集方法:

Lead.objects.distinct('companies', 'site', 'date').count() 

你可以通過什麼都場(或場)爲不同的,以獲得一個不重複的記錄行。然後你可以簡單地打電話給count

+0

嘗試了這一點,它看起來像這樣給了我多少個不同的行組,其中每個行都是唯一的。但是我需要知道每個組中的行數。想想我找到了解決方案,但感謝您的意見。 – meesterguyperson

相關問題