Django ORM - группировка и аннотирование подзапросом - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь сделать в Django ORM следующее:

  • Группировать по пользователю
  • Суммировать прибыль
  • Аннотировать с последним статусомэтот пользователь

Мой набор запросов выглядит следующим образом:

Sales.objects.values('user').annotate(
    profits = Sum('profit'),
    status = Subquery(Status.objects.filter(username=OuterRef('user')).order_by('-date').values('status')[:1]
).order_by()

Если я проверю SQL-запрос этого набора запросов, я вижу, что поле status добавляется в group by пункт.Но этот запрос не может быть выполнен.Как я могу запретить Django добавить это в предложение group by?Потому что остальная часть запроса работает нормально.

1 Ответ

0 голосов
/ 26 сентября 2019

Начните с объекта User, а не с объекта Sales.

Я не знаю структуру вашей модели, так что это немного догадка.

User.objects.annotate(
    profits = Sum('sales__profit'),
    status = Subquery(Status.objects.filter(username=OuterRef('user')).order_by('-date').values('status')[:1]).order_by()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...