Python 使用annotate获取不带逗号的百分比给我结果7/2=3而不是3.5
我希望获得以下内容的百分比值: Nombersteda*100/nomberhodor=0.00 我使用这个查询集:Python 使用annotate获取不带逗号的百分比给我结果7/2=3而不是3.5,python,django,django-models,django-queryset,percentage,Python,Django,Django Models,Django Queryset,Percentage,我希望获得以下内容的百分比值: Nombersteda*100/nomberhodor=0.00 我使用这个查询集: listilam = MediaSecParnt.objects.filter(date__range=[primary1, primary2]).values( 'withsecondray__name','withdegrey__name','withsecondray_id','withdegrey_id') .annotate(nombe
listilam = MediaSecParnt.objects.filter(date__range=[primary1, primary2]).values(
'withsecondray__name','withdegrey__name','withsecondray_id','withdegrey_id')
.annotate(nomberhodor=Sum('nomberhodor'), nomberesteda=Sum('nomberesteda'), percent=((((F('nomberhodor')*100)/(F('nomberesteda'))))))
在这里:
percent=((((F('nomberhodor')*100)/(F('nomberesteda'))))))
百分比值不带逗号!!
nomberhodor culomn是intiger,Nombersteda也是
结果如下:
<QuerySet [{'nomberhodor': 70, 'nomberesteda': 300, 'percent': 23},
{'nomberhodor': 64, 'nomberesteda': 150, 'percent': 42},
{'nomberhodor': 33, 'nomberesteda': 66, 'percent': 50},
{'nomberhodor': 50, 'nomberesteda': 200, 'percent': 25},
{'nomberhodor': 220, 'nomberesteda': 725, 'percent': 30},
{'nomberhodor': 567, 'nomberesteda': 900, 'percent': 63},
{'nomberhodor': 309, 'nomberesteda': 910, 'percent': 33}]>
应该是:
<QuerySet [{'nomberhodor': 70, 'nomberesteda': 300, 'percent': 23.33},
{'nomberhodor': 64, 'nomberesteda': 150, 'percent': 42.66},
{'nomberhodor': 33, 'nomberesteda': 66, 'percent': 50.00},
{'nomberhodor': 50, 'nomberesteda': 200, 'percent': 25.00},
{'nomberhodor': 220, 'nomberesteda': 725, 'percent': 30.34},
{'nomberhodor': 567, 'nomberesteda': 900, 'percent': 63.00},
{'nomberhodor': 309, 'nomberesteda': 910, 'percent': 33.95}]>
您可以使用指定输出格式:
from django.db.models import ExpressionWrapper, FloatField
.annotate(
nomberhodor=Sum('nomberhodor'),
nomberesteda=Sum('nomberesteda'),
percent=ExpresssionWrapper(
F('nomberhodor')*100/F('nomberesteda'),
output_field=FloatField()
)
)
您可以使用指定输出格式:
from django.db.models import ExpressionWrapper, FloatField
.annotate(
nomberhodor=Sum('nomberhodor'),
nomberesteda=Sum('nomberesteda'),
percent=ExpresssionWrapper(
F('nomberhodor')*100/F('nomberesteda'),
output_field=FloatField()
)
)
威廉·范昂森
percent=ExpressionWrapper(Cast(F('nomberhodor'), FloatField())/F('nomberesteda'),
output_field=FloatField()))
print(listilam):
<QuerySet [{'percent': 0.23333333333333334},
{'percent': 0.4266666666666667},
{'percent': 0.5}, { 'percent': 0.25},
{'percent': 0.30344827586206896},
{'percent': 0.63},
{'percent': 0.3395604395604396}]>
percent=ExpressionWrapper(Cast(F('nomberhodor'),FloatField())/F('nombersteda'),
输出(字段=FloatField())
打印(列表):
它现在的工作是:威廉·范昂森
percent=ExpressionWrapper(Cast(F('nomberhodor'), FloatField())/F('nomberesteda'),
output_field=FloatField()))
print(listilam):
<QuerySet [{'percent': 0.23333333333333334},
{'percent': 0.4266666666666667},
{'percent': 0.5}, { 'percent': 0.25},
{'percent': 0.30344827586206896},
{'percent': 0.63},
{'percent': 0.3395604395604396}]>
percent=ExpressionWrapper(Cast(F('nomberhodor'),FloatField())/F('nombersteda'),
输出(字段=FloatField())
打印(列表):
它现在的工作是
100.0
,而不是100.0
,而不是100
,这没有帮助,它只是给我一个结果。0所有的值都是这样的:'percent':42.0'percent':50.0},{'percent':25.0},'percent':30.0},'percent':63.0},'percent':33.0}>@SalimFh:如果我在本地运行这个,我会得到[4.0,2.0,1.3333,1.0,0.8,0.3333,0.5714,…]
对于一些样本数据。nomberesteda=models。PositiveIntegerField(null=1,blank=1)nomberhodor=models。PositiveIntegerField(null=1,blank=1)我真的不明白为什么它不能与这个模型一起工作!@SalimFh:我假设数据库是PostgreSQL?这有它自己的类型推断系统。在这种情况下,你使用Cast
。在服务器上使用PostgreSQL,但我现在正在进行本地测试,使用SQLLite这没有帮助,只要给我一个带0的结果就可以了。所有值都是这样的:“百分比”:42.0'cent':50.0},{'cent':25.0},'cent':30.0},'cent':63.0},'center':33.0}]>@SalimFh:如果我在本地运行这个,我会得到一些样本数据的[4.0,2.0,1.3333,1.0,0.8,0.3333,0.5714,]
(null=1,blank=1)我真的不明白为什么它不适用于这个模型!@SalimFh:我假设数据库是PostgreSQL?它有自己的类型推断系统。在这种情况下,您使用的是Cast
。在服务器上会使用PostgreSQL,但我现在正在进行本地测试并使用sqllite