TypeError:“ F”对象不可下标

时间:2019-05-24 06:50:18

标签: django django-rest-framework

我正在使用Django ORM查询名为列名为price(Decimal)和stock_units(int)的Product的数据库。我想将两列都乘以并得到累积的总和。

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 个答案:

答案 0 :(得分:1)

首先使用annotate()将价格和股票单位相乘,然后在聚合()中使用此注释。像这样:

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')
     )