2012-04-20 57 views
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
.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') 

回答

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模块的功能)。

+0

非常接近,但不工作 - 请看后 - 我添加方法...... – 2012-04-21 17:46:58

+0

YES!我不应该使用operation__value - 它只是价值; D – 2012-04-21 17:54:32