2017-11-09 28 views
0

私は1日の総収入を計算しようとしています。各DailyTotalには、販売されたアイテムの数(items_sold)と、その日に販売された価格(items_price)が含まれます(すべてのアイテムは、同じ価格で終日販売されます)。その部分は機能していますが、今はその日/国の為替レートでその値を乗算する必要があります。AnnotateとSumの中でDjango Subqueryを使用する方法

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( '率')はint型を返すされていないので、それがあると仮定し... が、私は

rate.values('rate')[0] 
を行うことはできません

またはIを取得:

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

ので、Iこのクエリを完了する方法がわからないのですか?

答えて

1

int型とNoneTypeを使って+ =しようとしているようです。つまり、これらの2つの変数のうちの1つが空に戻り、追加しようとしています。 + =上記のコードのオペランド、私はそれがSum()のどこかで起こっていると仮定しています。それが何をしているのかをデバッグすると、問題が見つかる可能性があります。

関連する問題