使用 Django 的查询集分组

Group By with Django's queryset

我在 Django 中有一个模型,这是它在较少字段时的样子 -

我想对 w.r.t buy_price_per_unit 行进行分组,同时我还想知道 buy_price_per_unit.

的总销售单位

所以在我们的例子中只有两个不同的 buy_price_per_unit 可用 (9, 10)。因此查询将 return 只有两行这样的 -

我必须满足的最后一个条件是查询结果应按 buy_price_per_unit.

的降序排列

这是我目前尝试过的-

orders = Orders.objects.values('id', 'buy_price_per_unit')\
        .annotate(units=Sum("units"))\
        .order_by("-buy_price_per_unit")\

上面查询的响应是 -

[
  {
    "id": 13,
    "buy_price_per_unit": 10,
    "units": 1
  },
  {
    "id": 12,
    "buy_price_per_unit": 9,
    "units": 10
  },
  {
    "id": 14,
    "buy_price_per_unit": 9,
    "units": 2
  },
  {
    "id": 15,
    "buy_price_per_unit": 9,
    "units": 1
  }
]

此响应的问题在于,即使价格相同,也会return编辑多条记录。

发生这种情况是因为您在 .values 中有 id,并且根据基础查询,它正在对 idbuy_price_per_unit 进行分组。

所以只需从 .values

中删除 id
orders = Orders.objects.values('buy_price_per_unit')\
        .annotate(units=Sum("units"))\
        .order_by("-buy_price_per_unit")\