Ошибка типа: объект 'F' не может быть подписан - PullRequest
0 голосов
/ 24 мая 2019

Я использую Django ORM для запроса базы данных с именем Product, имеющей имя столбца price (десятичное число) и stock_units (int). Я хочу умножить оба столбца и получить накопленную сумму.

report = Product.objects.filter(stock_units__gte=1).aggregate(Count('name'), Sum('stock_units'), Sum(F('price')*F('stock_units')))

Я ожидаю, что результат будет {

 "Total product Sold ": {
        "name__count": 2,
        "stock_units__sum": 844,
        "Total amount": 84400

    }
}

Но это через ошибку:

TypeError: объект 'F' не может быть подписан

1 Ответ

1 голос
/ 24 мая 2019

Сначала используйте annotate (), чтобы умножить цену и акции, а затем используйте эту аннотацию в aggregate (). Как это:

report = Product.objects.filter(stock_units__gte=1)\
    .annotate(value=F('price') * F('stock_units'))\
    .aggregate(
        count=Count('name'), 
        stock=Sum('stock_units'),
        total_value=Sum('value')
     )
...