2009-01-24 136 views
3

如何在django的trunk版本中通過查詢創建簡單羣組?group by by django

我需要這樣的東西

SELECT name 
FROM mytable 
GROUP BY name 

其實我想要做的就是簡單地得到具有不同的名稱的所有條目。

+0

堆棧溢出使用Markdown格式化,而不是BBcode或任何它。請編輯您的帖子並使用四個indendation空格來標記您的代碼塊。 – 2009-01-26 15:38:49

+0

[Django等同於count和group by]的可能重複(http://stackoverflow.com/questions/327807/django-equivalent-for-count-and-group-by) – 2010-12-13 12:54:27

回答

3

添加.distinct到您的查詢集:

Entries.objects.filter(something='xxx').distinct() 
2

這是行不通的,因爲每一行都有唯一的ID。所以每一條記錄是不同的..

解決我的問題,我用

foo = Foo.objects.all() 
foo.query.group_by = ['name'] 

但這並不是官方的API。

12

如果你需要的所有不同的名稱,只是這樣做:

Foo.objects.values('name').distinct() 

,你會得到一個字典列表,每一個有關鍵。如果您需要其他數據,只需將更多屬性名稱作爲參數添加到.values()調用中即可。當然,如果添加可能在具有相同名稱的行之間有所不同的屬性,則會破壞.distinct()。

如果你想獲得完整的模型對象,這將無濟於事。但無論如何,獲取不同的名稱和獲取完整的數據本身就是不相容的目標;你怎麼知道哪個有你想要的全名返回的給定名字?如果您想爲給定名稱的所有行計算某種聚合數據,最近將aggregation support添加到了Django主幹中,並且可以爲您解決這個問題。