Python 如何在注释和求和中使用Django子查询
我正在计算一天的总收入。每个DailyTotal包含一个已售出物品的计数(items_Selled)和当天这些物品的售价(items_Price)(所有物品全天以相同的价格售出)。这部分工作正常,但现在我需要将该值乘以当日/国家的汇率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
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()中的某个地方。调试它在那里所做的工作,您可能会发现问题。您可以这样做:首先注释通过
子查询得到的费率
,然后注释项目销售*项目价格*子查询结果的计算。然后你可以把它加起来。