Django ORM: группа и Макс.
У меня есть модель, которая выглядит так:
Requests: user, req_time, req_text
В БД записи могут выглядеть так:
id, user_id, req_time, req_text
1 1 TIMESTAMP YES
2 1 TIMESTAMP NO
3 2 TIMESTAMP YES
и др.
Как написать запрос ORM Django, который: группирует запросы пользователя, фильтрует запросы на основе req_text, а также выбирает максимальный идентификатор результирующего набора результатов. Поэтому для каждого пользователя я верну одну строку, которая соответствует условию фильтра, а также имеет наибольший id.
Ответы
Ответ 1
from django.db.models.aggregates import Max
request_values = Requests.objects.filter(req_text='YES') \
.values('user') \
.annotate(max_id=Max('id'))
Тогда request_values
будет выглядеть так:
[
{'user': 1, 'max_id': 1},
{'user': 2, 'max_id': 4},
{'user': 3, 'max_id': 5},
{'user': 4, 'max_id': 12},
...
]