0

楷模:

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
美元。衣服。| 555.23 美元 | 232.23 美元 | ... | $200.12| 84.44 美元

例如,其中 123.00 美元是 11 个月前制造的食品类别的运营价值总和,100.14 美元 - 10 个月前等等 - 54.12 美元是当月的总和,555.23 => 相同但类别服装...

我搜索了很多,但大多数示例都很简单 - 没有相关类(类别)

答案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')
4

1 回答 1

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模块函数)。

于 2012-04-21T04:17:01.763 回答