3

如何在 django 的主干版本中通过查询创建简单的组?

我需要类似的东西

SELECT name
FROM mytable
GROUP BY name

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

4

3 回答 3

12

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

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

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

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

于 2009-01-24T15:37:28.350 回答
3

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

Entries.objects.filter(something='xxx').distinct()
于 2009-01-24T07:04:07.280 回答
2

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

为了解决我的问题,我使用了

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

但这不是官方 API。

于 2009-01-24T07:09:16.550 回答