Django annotate Не может вычислить сумму - это совокупность - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть набор запросов 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...