1
1
# -*- coding: utf-8 -*-
2
2
from datetime import timedelta
3
+ from django .db .models import Count
3
4
from django .utils .translation import ugettext_lazy as _
4
5
try :
5
6
from django .utils .timezone import now
@@ -21,9 +22,11 @@ class BaseChart(modules.DashboardModule):
21
22
template = 'admin_user_stats/modules/chart.html'
22
23
chart_size = "580x100"
23
24
days = None
25
+ values_count = 30
24
26
interval = 'days'
25
27
queryset = None
26
28
date_field = 'date_joined'
29
+ aggregate = Count ('id' )
27
30
28
31
def is_empty (self ):
29
32
return False
@@ -32,7 +35,7 @@ def __init__(self, *args, **kwargs):
32
35
super (BaseChart , self ).__init__ (* args , ** kwargs )
33
36
34
37
if self .days is None :
35
- self .days = {'days' : 30 , 'weeks' : 30 * 7 , 'months' : 30 * 12 }[self .interval ]
38
+ self .days = {'days' : self . values_count , 'weeks' : self . values_count * 7 , 'months' : self . values_count * 30 , 'years' : self . values_count * 365 }[self .interval ]
36
39
37
40
self .data = self .get_data (self .interval , self .days )
38
41
self .prepare_template_data (self .data )
@@ -42,12 +45,13 @@ def get_caption(self, dt):
42
45
'days' : dt .day ,
43
46
'months' : dt .strftime ("%b" ),
44
47
'weeks' : dt .strftime ('%W' ),
48
+ 'years' : dt .strftime ('%Y' ),
45
49
}[self .interval ]
46
50
47
51
# @cached(60*5)
48
52
def get_data (self , interval , days ):
49
53
""" Returns an array with new users count per interval """
50
- stats = QuerySetStats (self .queryset , self .date_field )
54
+ stats = QuerySetStats (self .queryset , self .date_field , aggregate = self . aggregate )
51
55
today = now ()
52
56
begin = today - timedelta (days = days - 1 )
53
57
return stats .time_series (begin , today + timedelta (days = 1 ), interval )
@@ -75,4 +79,5 @@ def get_charts(self):
75
79
self .chart_model (_ ('By Day' ), interval = 'days' ),
76
80
self .chart_model (_ ('By Week' ), interval = 'weeks' ),
77
81
self .chart_model (_ ('By Month' ), interval = 'months' ),
82
+ self .chart_model (_ ('By Year' ), interval = 'years' ),
78
83
]
0 commit comments