Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用annotate获取不带逗号的百分比给我结果7/2=3而不是3.5_Python_Django_Django Models_Django Queryset_Percentage - Fatal编程技术网

Python 使用annotate获取不带逗号的百分比给我结果7/2=3而不是3.5

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

我希望获得以下内容的百分比值: Nombersteda*100/nomberhodor=0.00 我使用这个查询集:

     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