2017-02-11 10 views
0

私はあなたにこのような状況を表示してみましょう:条件式 - パイソン/ジャンゴ

data = [Station.objects 
         .filter(nr=form.cleaned_data['station']) 
         .aggregate(avg=Avg('residual'), 
            stdev=StdDev('residual'), 
            number=Count('residual'), 
            good_observations = Count(Case(When(abs('residual')<250))), 
            outliers=Count(Case(When(abs('residual')>=250))), 
            )] 

私は「残留」(浮動小数点値)を使用して、データベース内の行をカウントする250よりも小さいか大きいが、それ動作しません。すべての

最初に:)

のinit(キーワード引数第二

としてQオブジェクトまたは検索のいずれかをとります:私はTypeErorを持っている(

ABS )関数は入力エラーとしてTypeErrorと文字列値のために機能しません。

私はあなたのいくつかは、この問題で私を助けることができる願っています:)

答えて

0

それはエラーメッセージで述べているように、When__init__は非常にQuerySet.filterのように、キーワード引数またはQ objectsをとります。

When(Q(residual__lt=250) & Q(residual__gt=-250)) # -250 < residual < 250 
When(Q(residual__gte=250) | Q(residual__lte=-250)) # other cases 
+0

はい、それはTypeError例外で問題を解決しますが、両方のカウント結果は:「数」と呼ばれる最初のカウントは、たとえば210のために示していたときに0に不可能何であるあなたはQオブジェクトを使用してabsを模倣することができますすることができます – dekarz