У меня есть набор запросов Django ORM, и я пытаюсь выполнить следующее
in_month = OrderEntry.objects.filter(order__closed_date__year=self.year).filter(
order__closed_date__month=month_nr)
result = in_month.values('product_code').annotate(
quantity=Sum('quantity'),
free_count=Sum('free_count'),
quantity_bottles=Sum(Case(
When(product_variant__megapack_quantity=4, then=(F('quantity') * Value(4))),
When(product_variant__megapack_quantity=None, then=F('quantity')),
default=Value(0),
output_field=IntegerField(),
))
)
Однако это не работает.Я получаю сообщение об ошибке:
Cannot compute Sum('<Case: CASE WHEN <Q: (AND: ('product_variant__megapack_quantity', 4))> THEN <CombinedExpression: F(quantity) * Value(4)>, WHEN <Q: (AND: ('product_variant__megapack_quantity', None))> THEN F(quantity), ELSE Value(0)>'): '<Case: CASE WHEN <Q: (AND: ('product_variant__megapack_quantity', 4))> THEN <CombinedExpression: F(quantity) * Value(4)>, WHEN <Q: (AND: ('product_variant__megapack_quantity', None))> THEN F(quantity), ELSE Value(0)>' is an aggregate
Я хотел бы получить набор запросов с 4 полями: * product_code * amount * free_count * amount_bottles
Где количество бутылок должно рассчитываться следующим образом(в псевдокоде):
sum = 0
for order in orders:
if order.product_variant.megapack_quantity == 4:
sum += order.quantity * 4
else:
sum += order.quantity
как я могу это исправить / выполнить с помощью одного запроса к БД с помощью Django ORM?