Большой запрос или raw_query Django? [закрыто]

Я делаю историю фильтров на Django с полями source_path и target_path, сохраненными в таблице Database. Нужно получить последние 5 фильтров, но разные

Пример:

  1. Гвадалахара - Тихуана
  2. Мексика - Монтеррей
  3. Гвадалахара - Мехикали
  4. Гвадалахара - Тихуана <-- Это равно 1
  5. Колима -Ensenada

Я сделал несколько наборов запросов, но неудачные результаты

LastFilterRoute.objects.filter(user=request.user).order_by('source_path', 'target_path').distinct('source_path', 'target_path')[:5] 

Возвращает другие фильтры, но не последние

**Edit ** Я получил правильный запрос, но кажется слишком усложнее для выполнения в django

Было бы лучше, если бы я разделил его или сделал raw_query?

SELECT distinct c.name, c2.name, max(created)
FROM public.filter_route f
INNER JOIN cities_city c
ON f.source_path_id = c.id
INNER JOIN cities_city c2
ON f.target_path_id = c2.id
group by c.name, c2.name
ORDER BY max DESC

Есть ли лучший способ сделать это или чего мне не хватает?

0
задан 22 April 2020 в 04:23

1 ответ

Ну, я выяснил

Использовать GROUP BY вместо distinct и Max() для последнего созданного запроса

LastFilterRoute.objects.filter(user=request.user).values('source_path__name', 'target_path__name').annotate(last=Max('created')).order_by('-last')[:5]

И запрос был

SELECT "cities_city"."name", T4."name", 
    MAX("filter_route"."created") AS "last" 
FROM "filter_route" 
INNER JOIN "cities_city" 
ON ("filter_route"."source_path_id" = "cities_city"."id") 
INNER JOIN "cities_city" T4 ON ("filter_route"."target_path_id" = T4."id")
WHERE "filter_route"."user_id" = 1 
GROUP BY "cities_city"."name", T4."name" 
ORDER BY "last" 
DESC LIMIT 5
0
ответ дан 25 April 2020 в 10:42

Другие вопросы по тегам:

Похожие вопросы: