Упорядочивание данных после различных
Я различаю данные с помощью sku_id
queryset = self.filter_queryset(queryset.order_by('sku_id','id').distinct('sku_id'))
Однако этот результат не сортируется по идентификатору,
затем я пытаюсь
queryset = self.filter_queryset(queryset.order_by('sku_id','id').distinct('sku_id').order_by('id'))
Однако это показывает ошибку
ProgrammingError at /api/myfetch/
SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT COUNT(*) FROM (SELECT DISTINCT ON ("myapp_produc...
Можно ли отсортировать столбец после distinct?
Когда вы используете distinct('sku_id')
в Django
, это переводится как DISTINCT ON (sku_id)
в PostgreSQL
. Это похоже на функцию в PostgreSQL
, которая требует указывать в ORDER BY
тот же столбец, что и в DISTINCT
.
В вашем втором запросе вы пытаетесь упорядочить данные по идентификатору, что PostgreSQL
не позволяет.
Решение:
queryset = self.filter_queryset(
queryset.order_by('sku_id', 'id').distinct('sku_id')
).order_by('id')
В прошлый раз, когда я проверял, вам нужно было использовать подзапрос, чтобы получить ожидаемое поведение с серверной частью postgres:
from django.db.models import Subquery
your_objects = YourObjectClass.objects.filter(sku_id__in=Subquery(YourObjectClass.objects.distinct('sku_id').values('sku_id'))).order_by('id')
Это должно привести к получению записей с различными sku_id
, упорядоченных по возрастанию id
.