【问题标题】:Django ORM - Group by and annotate with subqueryDjango ORM - 按子查询分组和注释
【发布时间】:2020-01-26 20:14:10
【问题描述】:

我在 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 子句?因为查询的其余部分工作正常。

【问题讨论】:

    标签: python django orm


    【解决方案1】:

    从用户对象而不是销售对象开始。

    我不知道你的模型结构,所以这有点猜测。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-26
      • 2018-06-21
      • 1970-01-01
      • 2019-10-13
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多