group by by django

group by by django

问题描述:

如何在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

添加.distinct到您的查询集:

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

这是行不通的,因为每一行都有唯一的ID。所以每一条记录是不同的..

解决我的问题,我用

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

但这并不是官方的API。

如果你需要的所有不同的名称,只是这样做:

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

,你会得到一个字典列表,每一个有关键。如果您需要其他数据,只需将更多属性名称作为参数添加到.values()调用中即可。当然,如果添加可能在具有相同名称的行之间有所不同的属性,则会破坏.distinct()。

如果你想获得完整的模型对象,这将无济于事。但无论如何,获取不同的名称和获取完整的数据本身就是不相容的目标;你怎么知道哪个有你想要的全名返回的给定名字?如果您想为给定名称的所有行计算某种聚合数据,最近将aggregation support添加到了Django主干中,并且可以为您解决这个问题。