如何在Annotate和Sum中使用Django子查询

时间:2017-11-09 02:47:36

标签: python django

我正在尝试计算一天的总收入。每个DailyTotal包含销售商品的数量(items_sold)和当天销售的商品的价格(items_price)(每件商品全天以相同的价格出售)。那部分是有效的,但现在我需要将该值乘以该日/国家的汇率。

rate = ExchangeRate.objects.filter(  
    date=OuterRef('date'), 
    country=OuterRef('country')))  

calc_with_rate = Sum(F('items_sold') * F('items_price') * Subquery(rate.values('rate')), output_field=FloatField(),)  

results = DailyTotal.objects.filter(**query_filters).annotate(
    revenue=calc_with_rate)

但我明白了:

unsupported operand type(s) for +=: 'int' and 'NoneType

我认为这是因为rate.values(' rate')没有返回一个int .. 但我无法做到

rate.values('rate')[0]

或者我得到:

This queryset contains a reference to an outer query and may only be used in a subquery.

所以我不确定如何完成此查询?

1 个答案:

答案 0 :(得分:1)

看起来你正试图使用​​int和NoneType进行+ = - 即这两个变量中的一个返回空,并且你正试图添加它们 - 因为你没有用+ +明确地做它=上面代码中的操作数,我假设它发生在Sum()中的某个地方。调试它在那里做了什么,你可能会发现问题。