Django ORM-分组依据并用子查询注释

时间:2019-09-26 14:08:51

标签: python django orm

我要在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 :(得分:0)

从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()