Группировка по с помощью набора queryset в Django
У меня есть модель в Django и вот как она выглядит с меньшим количеством полей -
Я хочу сгруппировать строки по buy_price_per_unit и в то же время я также хочу знать общее количество продаваемых единиц для этого buy_price_per_unit.
Так что в нашем случае доступны только два разных buy_price_per_unit (9, 10). Следовательно, запрос вернет только две строки следующего вида -
Последнее условие, которое я должен выполнить - результат запроса должен быть в порядке убывания 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")\

