Фильтр Django на различном с порядком, созданным в

#django #django-models #django-views

Вопрос:

Как я могу фильтровать с помощью distinct и упорядочивать по

 IncomingCallRecording.objects.filter().order_by("lead_id","-created_at").distinct("lead_id")
 

Проблема:
Заказ по не работает с созданным по адресу

Есть ли альтернативное решение, которое могло бы помочь

Комментарии:

1. Какую ошибку вы получаете. Также вы используете PostGres?

2. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.

Ответ №1:

Вы можете просто использовать created_at order_by его .

 IncomingCallRecording.objects.order_by("-created_at").distinct("lead_id")
 

Сортировка по нескольким столбцам выполняется последовательно. Если вы определяете два столбца order_by , он сортируется по первому столбцу, а затем по второму столбцу (сначала по lead_id , а затем внутри каждого lead_id столбца по created_at ).

Обновить

Решение будет подвергнуто обработке в базе данных. Для 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')
 

Комментарии:

1. Да, но это не работает: « ВЫБОР РАЗЛИЧНЫХ выражений должен соответствовать начальному ПОРЯДКУ выражений В СТРОКЕ 1: ВЫБЕРИТЕ КОЛИЧЕСТВО(*) ИЗ (ВЫБЕРИТЕ РАЗЛИЧНЫЕ ВЫРАЖЕНИЯ«

2. База данных, которую вы используете?

3. Сейчас я использую postgresql

4. Правильно! Возможно, вам понадобится использовать Subquery . Я обновляю ответчик.