【发布时间】:2017-01-15 09:21:03
【问题描述】:
我正在使用 Django 的 aggregate query expression 来汇总一些值。最终值是一个除法表达式,有时可能以零为分母。如果是这种情况,我需要一种方法来逃避,以便它简单地返回 0。
我尝试了以下方法,因为我一直在使用类似于我的注释表达式:
from django.db.models import Sum, F, FloatField, Case, When
def for_period(self, start_date, end_date):
return self.model.objects.filter(
date__range=(start_date, end_date)
).aggregate(
sales=Sum(F("value")),
purchase_cogs=Sum(F('purchase_cogs')),
direct_cogs=Sum(F("direct_cogs")),
profit=Sum(F('profit'))
).aggregate(
margin=Case(
When(sales=0, then=0),
default=(Sum(F('profit')) / Sum(F('value')))*100
)
)
但是,它显然不起作用,因为正如错误所说:
'dict' 对象没有属性'aggregate'
处理这个问题的正确方法是什么?
【问题讨论】: