У меня есть модель Read
, что связано с моделью Article
. Я хотел бы сделать запрос, когда статьи уникальны и упорядочены по date_added
. Поскольку я использую postgres, я бы предпочел использовать метод .distinct()
и указать поле article
. Нравится так:Django .order_by() с .distinct() using postgres
articles = Read.objects.order_by('article', 'date_added').distinct('article')
Однако это не дает желаемого эффекта и заказывает запрос по порядку, в котором они были созданы. Я знаю примечание о .distinct()
и .order_by()
в документации Django, но я не вижу, что это применимо здесь, поскольку побочный эффект, о котором он упоминает, будет дублировать, и я этого не вижу.
# To actually sort by date added I end up doing this
articles = sorted(articles, key=lambda x: x.date_added, reverse=True)
Это выполняет весь запрос, прежде чем я на самом деле это нужно и потенциально может получить очень медленно, если есть много записей. Я уже оптимизировал использование select_related()
.
Есть ли лучший, более эффективный способ создания запроса с уникальностью связанной модели и даты order_by?
ОБНОВЛЕНИЕ Выход в идеале быть QuerySet прочитанных случаях, когда их связанные статьи является уникальным в QuerySet и только с использованием ОРМ Django (т.е. сортировки в Python).
Какую версию Django вы используете? Передача параметров в 'distinct' доступна только в 1.4+ –
1.4 и с использованием postgres, она работает – ender