Django ORM:Group by和Max

Django ORM: Group by and Max

我有一个看起来像这样的模型:

1
Requests: user, req_time, req_text

在数据库中,记录如下所示:

1
2
3
4
id, user_id, req_time, req_text
1     1      TIMESTAMP  YES
2     1      TIMESTAMP  NO
3     2      TIMESTAMP  YES

等等

如何编写Django ORM查询,该查询将:按用户对请求进行分组,根据req_text过滤请求,并选择结果集的最大ID。 因此,对于每个用户,我将返回与过滤条件匹配并具有最大ID的一行。


1
2
3
4
5
from django.db.models.aggregates import Max

request_values = Requests.objects.filter(req_text='YES') \
                 .values('user') \
                 .annotate(max_id=Max('id'))

然后request_values将如下所示:

1
2
3
4
5
6
7
[
    {'user': 1, 'max_id': 1},
    {'user': 2, 'max_id': 4},
    {'user': 3, 'max_id': 5},
    {'user': 4, 'max_id': 12},
    ...
]