复数总和除以月份

时间:2012-04-20 22:50:53

标签: django sum

模型:

class Category(models.Model):
  name = models.CharField(max_length=100)

class Operation(models.Model):
  date = models.DateField()
  value = models.DecimalField(max_digits = 9, decimal_places = 2)
  category = models.ForeignKey(Category, null = True)
  comments = models.TextField(null = True)

现在我要创建一个包含13列的视图:

类别名称| -11 | -10 | -9 | ...... | -1 | 0

例如

......食物.. | $ 123.00 | 100.14美元| ...... | $ 120.13 | $ 54.12
.clothes。| $ 555.23 | $ 232.23 | ...... | $ 200.12 | $ 84.44

其中$ 123.00例如是类别食品的操作值的总和,11个月前,100.14美元 - 10个月前等等 - $ 54.12是当月的总和,555.23 =>同样但是类别的衣服...

我google了很多,但大多数例子很简单 - 没有相关的类(类别)

建议答案1后的正确答案:

def get_month_sum_series(self):
  import qsstats, datetime
  from django.db.models import Sum
  qss = qsstats.QuerySetStats(self.operation_set.all(), date_field='date', aggregate_field='value',aggregate_class=Sum)
  today = datetime.date.today()
  year_ago = today - datetime.timedelta(days=365)
  return qss.time_series( start_date=year_ago, end_date=today, interval='months')

1 个答案:

答案 0 :(得分:0)

看看django-qsstats。它具有time_series功能,可让您在一个请求中随时获取整个系列的数据。在您的情况下,我将在Category中创建一个方法,例如:

def price_series(self):
    return qsstats.time_series(queryset=self.operation_set.all(), start_date=year_ago, end_date=now, interval='months')

当然,您需要设置year_agonow个变量(例如,使用datetime模块函数)。