django分组

时间:2009-01-24 05:15:15

标签: python django django-models

如何在django的trunk版本中按查询创建简单的分组?

我需要像

这样的东西
SELECT name
FROM mytable
GROUP BY name

实际上我想做的只是获取具有不同名称的所有条目。

3 个答案:

答案 0 :(得分:12)

如果您需要所有不同的名称,请执行以下操作:

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

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

如果您想要获得完整的模型对象,这将无济于事。但是,获取不同的名称和获取完整数据本质上是不兼容的目标;您如何知道哪个行具有您想要完整返回的给定名称?如果你想为具有给定名称的所有行计算某种聚合数据,最近将aggregation support添加到Django trunk并且可以为你处理。

答案 1 :(得分:3)

将.distinct添加到您的查询集:

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

答案 2 :(得分:2)

这不起作用,因为每一行都有唯一的ID。所以每条记录都是独一无二的。

解决我使用的问题

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

但这不是官方API。