Джанго ОРМ: Группировка по Максу - PullRequest
15 голосов
/ 04 августа 2011

У меня есть модель, которая выглядит так:

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

и т.д.

Как написать запрос Django ORM, который: группирует запросы по пользователю, фильтрует запросы по req_text, а также выбирает максимальный идентификатор результирующего набора результатов. Поэтому для каждого пользователя я верну одну строку, которая соответствует условию фильтра, а также имеет наибольший идентификатор.

1 Ответ

15 голосов
/ 04 августа 2011
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},
    ...
]
...