如何在django的trunk版本中按查询创建简单的分组?
我需要像
这样的东西SELECT name
FROM mytable
GROUP BY name
实际上我想做的只是获取具有不同名称的所有条目。
答案 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。