Фильтр Django order by() с отличным()
Как я могу сделать order_by
такой ....
p = Product.objects.filter(vendornumber='403516006')
.order_by('-created').distinct('vendor__name')
проблема в том, что у меня есть несколько поставщиков с тем же именем, и я хочу только последний продукт от поставщика ..
надеюсь, что это имеет смысл?
Я получил эту ошибку DB:
SELECT DISTINCT on выражения должны соответствовать начальному порядку по выражениям Строка 1: Выберите DISTINCT ON ("search_vendor"."имя") "поисковый продукт."..
3 ответов
на основе Вашего сообщения об ошибке и это другой вопрос, мне кажется, это исправит его:
p = Product.objects.filter(vendornumber='403516006')\
.order_by('vendor__name', '-created').distinct('vendor__name')
то есть, кажется, что DISTINCT ON
выражение(ы) должно соответствовать крайнему левому ORDER BY
выражения(ы). Поэтому, сделав столбец, который вы используете в distinct
как первый столбец order_by
, Я думаю, что это должно сработать.
просто сопоставление крайнего левого order_by () arg и distinct () не сработало для меня, вызвав ту же ошибку (ошибка Django 1.8.7 или функция)?
qs.order_by('project').distinct('project')
однако это сработало, когда я изменил на:
qs.order_by('project_id').distinct('project')
и у меня даже нет нескольких order_by args.
у меня была аналогичная проблема, но затем со связанными полями. Просто добавив соответствующее поле в distinct()
, Я не получил правильные результаты.
Я хотел Сортировать по room__name
держал person
(связан с residency
) уникальная. Повторение связанного поля в соответствии с ниже исправлена моя проблема:
.order_by('room__name', 'residency__person', ).distinct('room__name', 'residency__person')
Смотрите также статьи по теме: