2016-06-23 5 views
0

のエラーは私はジャンゴでSUMPRODUCTのクエリを実行しようとしているガイド:は "ベース10と()int型のリテラル無効" DecimalFieldは

merchandise_value = Product.objects.all()\ 
    .aggregate(merch_value=Sum(F('qty_ordered')*F('msrp'))) 

'msrp'は(2 decimal_places付き)DecimalFieldフィールドです。 'qty_ordered'IntegerFieldです。私はint(float(F('msrp')))またはint(float(str(F('msrp'))))のようなクレイジーなことを行う場合でも、私はまだ取得:

invalid literal for int() with base 10: 'F(msrp)' 

他の同様の質問は、私が使用しているものと同様の解決策を提案します。私は何をねじ込みましたか?そしておそらくもっと重要なのは、どうしてその回線にint()が組み込まれているのですか?私は明示的にint()と呼んでいません。

答えて

0

だから、私はこのケースで想定あなたは、データベース操作は、この2つのデータ型の間で決められない可能性があるため、必要に応じて出力データ型を取得するためにSumに明示的output_field=FloatField()を呼び出す必要があります:

from django.db.models import F, FloatField, Sum 
... 
merchandise_value = Product.objects.all()\ 
    .aggregate(merch_value=Sum(F('qty_ordered')*F('msrp'),output_field=FloatField())) 

このDjango examples

を見てみましょう
+0

ああ、ありがとう。ここに記載されています:https://docs.djangoproject.com/en/1.9/ref/models/expressions/#using-f-with-annotations – Escher

関連する問題