Я удивлен, что этот вопрос не возник. Не удалось найти много в Интернете.
Использование Entry.objects.latest('created_at')
Я могу восстановить последнюю запись для всех объектов Entry, но скажите, хочу ли я, чтобы последняя запись для каждого пользователя? Это похоже на запрос последней записи SQL. Но как мне добиться этого с помощью ORM? Вот мой подход. Мне интересно, является ли это самым эффективным способом делать то, что я хочу.
Сначала я выполняю вспомогательный запрос: объекты сгруппированы по пользователю, а для каждого пользователя возвращается максимальное (последнее) созданное_by поле (created_at__max). Затем я фильтрую объекты Entry на основе результатов в подзапросе и получаю требуемые объекты.
Entry.objects.filter(created_at__in=Entry.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
или с помощью менеджера:
class UsersLatest(models.Manager):
def get_query_set(self):
return super(UsersLatest,self).get_query_set().filter(created_at__in=self.model.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
Есть ли более эффективный способ? возможно без суб-запроса?
Спасибо,
Пол