首页 > 解决方案 > Django ORM:需要每个值的最大 ID 值列表

问题描述

我的表大致是这样的:

ID | DISPLAY | CATEGORY | NAME
1  |  true   |    1     | some name
2  |  true   |    1     | some other name
3  |  true   |    1     | some name
4  |  true   |    2     | something else

我想要一个结果集,它会给我一个给定类别的名称和最大 ID,并且 display = true,所以在 SQL 形式中:

select name, max(id) as recent
from TABLE
where category = 1 and display = true

我已经这样做了:

rs = TABLE.objects.filter(category=1, display=True).values('name').annotate(recent=Max('id'))

但我得到一个随机 ID,而不是最大 ID。这是为什么?我需要做什么?

标签: djangodjango-modelsdjango-orm

解决方案


您的 django 查询返回分组列“名称”的列表和该组的 max_id。在您的示例中,结果是:

Queryset({'name':'some name', recent="3"},{'name':'some other name', recent="2"})

如果您需要这些过滤器的 max_id,您可以使用aggregate函数:

rs = TABLE.objects.filter(category=1, display=True).aggregate(recent=Max('id'))


推荐阅读