Django Filter on Distinct with orderby создан в
Как я могу фильтровать с помощью distinct и order by
IncomingCallRecording.objects.filter().order_by("lead_id","-created_at").distinct("lead_id")
Проблема: Order by не работает с created at
Есть ли альтернативное решение, которое может помочь
Вы можете просто использовать created_at
в order_by
.
IncomingCallRecording.objects.order_by("-created_at").distinct("lead_id")
Сортировка по нескольким столбцам выполняется последовательно. Если вы определите два столбца в order_by
, то сортировка будет производиться по первому столбцу, а затем по второму (сначала по lead_id
, а затем внутри каждого lead_id
сортировка по created_at
).
Update
Решение будет зависеть от базы данных. Для MYSQL, DISTINCT ON
не допускается. Для POSTGRES выражение DISTINCT ON
должно соответствовать ORDER BY
.
В случае POSTGRES
, вам нужно будет использовать Subquery
, если вы хотите использовать различные выражения DISTINCT ON
и ORDER BY
.
IncomingCallRecording.objects.filter(
pk__in=Subquery(
IncomingCallRecording.objects.distinct('lead_id').values('pk')
)
).order_by('-created_at')