Python 如何在注释和求和中使用Django子查询

Python 如何在注释和求和中使用Django子查询,python,django,Python,Django,我正在计算一天的总收入。每个DailyTotal包含一个已售出物品的计数(items_Selled)和当天这些物品的售价(items_Price)(所有物品全天以相同的价格售出)。这部分工作正常,但现在我需要将该值乘以当日/国家的汇率 rate = ExchangeRate.objects.filter( date=OuterRef('date'), country=OuterRef('country'))) calc_with_rate = Sum(F('items

我正在计算一天的总收入。每个DailyTotal包含一个已售出物品的计数(items_Selled)和当天这些物品的售价(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.

因此,我不确定如何完成此查询?

看起来您正在尝试使用int和NoneType进行+=运算-也就是说,这两个变量中的一个返回为空,您正在尝试添加它们-因为您在上面的代码中没有显式使用+=操作数,所以我假设它发生在Sum()中的某个地方。调试它在那里所做的工作,您可能会发现问题。

您可以这样做:首先注释通过
子查询得到的
费率
,然后注释
项目销售*项目价格*子查询结果的计算。然后你可以把它加起来。