gpt4 book ai didi

python - Django,两个注释结果之间的除法无法正确计算

转载 作者:太空狗 更新时间:2023-10-29 19:32:23 24 4
gpt4 key购买 nike

我试图在查询集中的两个注释结果之间进行划分。印象比点击大得多,所以我应该得到小数点后十位。

def get_queryset(self):
return googleData.objects.filter(account=self.account_name).\
values('date').\
annotate(Sum('click'), Sum('impression'), Sum('converted_click'),
Sum('conversion_value'), Sum('cost'), Sum('conversion_value'), ctr_monthly= Sum('click')/Sum('impression')).\
order_by('-date')

问题在这里:

ctr_monthly= Sum('click')/Sum('impression'))

在模板中我有:

<td>{{ googleData.ctr_monthly | floatformat:2}} </td>

结果是 0.00。如果我执行 ctr_final = click * impression,它会正确生成。Click & Impression 均为整数字段。

我尝试使用 float(),但出现语法错误。

另一个问题是:制作这样的查询集的最佳做法是什么?有什么方法可以将它分解成几段短代码,并使其更整洁、更易读?

谢谢~

最佳答案

使用较新版本的 Django,您可以使用新的 Func 对象在 之前将值转换为 FloatFieldsDecimalFields求和

from django.db.models.functions import Cast
from django.db.models import FloatField
ctr_monthly= Cast(Sum('click'), FloatField())/Cast(Sum('impression')), FloatField())

即使使用旧版本的 Django,您也可以在注释 ctr_monthly 之前在 Sum 上指定 output_field,如下所示:

from django.db.models import F
def get_queryset(self):
return googleData.objects.filter(
account=self.account_name
).values('date').annotate(
click_sum=Sum(
'click',
output_field=FloatField()
),
impression_sum=Sum(
'impression',
output_field=FloatField()
),
converted_click_sum=Sum('converted_click'),
conversion_value_sum=Sum('conversion_value'),
cost_sum=Sum('cost')
).annotate(
ctr_monthly=F('click_sum') / F('impression_sum')
).order_by('-date')

关于python - Django,两个注释结果之间的除法无法正确计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32262862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com