首页 > 解决方案 > 如何在Django中使用注释找到特定值和总值之间的比率并将其存储在每个实体中?

问题描述

我正在尝试计算每种产品的销售额与总销售额之间的比率。我想将该比率存储在每个模型实体中。我怎样才能做到这一点?

这是我的尝试。它不起作用。它抛出“不支持从 CombinedExpression 到 Decimal 的转换”。

count_products = Product.objects.count() # total value
products = Product.objects.annotate(num_sales=Count('cartitem')).all().annotate(support=Value(F('num_sales') / count_products, output_field=DecimalField()))

标签: pythondjangodjango-orm

解决方案


您不必使用Value除法,它仅用于常量。应该是.annotate(support=F('num_sales') / count_products)。另外我建议添加output_field到您的Count('cartitem'), 所以数据库将进行十进制,而不是整数除法。注意output_field必须是一个实例,而不是类本身。()所以在后面加上DecimalField,就足够了。


推荐阅读