我试图在django中执行sumproduct查询:
merchandise_value = Product.objects.all()\
.aggregate(merch_value=Sum(F('qty_ordered')*F('msrp')))
'msrp'
是DecimalField
字段(包含2 decimal_places
)。 'qty_ordered'
是IntegerField
。即使我做了int(float(F('msrp')))
或int(float(str(F('msrp'))))
等疯狂的事情,我仍然会得到:
invalid literal for int() with base 10: 'F(msrp)'
其他类似的问题提出了与我所使用的类似的解决方案。我搞砸了什么?也许更重要的是,为什么要调用int()
以某种方式集成到该行?我没有明确地调用int()
。
答案 0 :(得分:0)
所以,我想在这种情况下你应该output_field=FloatField()
明确地调用Sum
来获取所需的输出数据类型,因为数据库操作可能不会决定这两种数据类型:
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