Группировка по с помощью набора queryset в Django

У меня есть модель в Django и вот как она выглядит с меньшим количеством полей -

enter image description here

Я хочу сгруппировать строки по buy_price_per_unit и в то же время я также хочу знать общее количество продаваемых единиц для этого buy_price_per_unit.

Так что в нашем случае доступны только два разных buy_price_per_unit (9, 10). Следовательно, запрос вернет только две строки следующего вида -

enter image description here

Последнее условие, которое я должен выполнить - результат запроса должен быть в порядке убывания 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
  }
]

Проблема с этим ответом в том, что даже для одной и той же цены возвращается несколько записей.

Это происходит потому, что у вас есть id в .values, и на основе основного запроса он группирует id и buy_price_per_unit обоих.

Просто удалите id из .values

orders = Orders.objects.values('buy_price_per_unit')\
        .annotate(units=Sum("units"))\
        .order_by("-buy_price_per_unit")\
Вернуться на верх