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')
Вернуться на верх