Джанго группа / агрегация - PullRequest
       13

Джанго группа / агрегация

1 голос
/ 23 февраля 2010

У меня есть следующая структура с примерами данных:

id   season_id    title 
1    1            Intro
2    1            Second part
3    1            Third part
4    4            Other intro
5    4            Other second part

(не спрашивайте почему), где season_id всегда указывает на идентификатор первого эпизода сезона ...

Что я хочу, чтобы получить следующее:

1    1            Intro
4    4            Other intro

которые являются первыми эпизодами для сезона, технически говоря - все записи с самым низким season_eid

для и я использую следующий запрос, чтобы получить их идентификаторы:

Movie.objects.filter(category_type = 2).values('season_eid').annotate(models.Min('season_eid'))

и имея идентификатор, я могу получить все данные для объектов, используя конструкцию django orm __in.

Могу ли я сделать группировку / аннотацию и взять все поля / значения, используя только один запрос? values ​​+ annotate дает мне только список словарей, но вместо этого я хотел бы получить правильные объекты (самое низкое значение / мин сезона_eid) с остальными полями.

1 Ответ

1 голос
/ 23 февраля 2010
Movie.objects.annotate(category_min_season = models.Min('category__season_id')).filter(season_id=category_min_season)

при условии, что ваша категория имеет FK для модели Movies.

Обновление:

На самом деле вам даже не нужны аннотации; благодаря денормализованным данным, которые вы сохранили в таблице.

Вы можете просто сделать:

Model.objects.filter(id=Q(season_id))
...