Skip to content

Commit e3eaa6a

Browse files
committed
Merge pull request #4 from PetrDlouhy/master
More flexible charts
2 parents 9f26659 + acc49d3 commit e3eaa6a

File tree

3 files changed

+11
-3
lines changed

3 files changed

+11
-3
lines changed

AUTHORS.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ Authors
22
=======
33

44
* Mikhail Korobov;
5-
* Alex Lovell-Troy.
5+
* Petr Dlouhý;
6+
* Alex Lovell-Troy.

README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,11 @@ To build charts for other time-series data, inherit from BaseChart and set a few
8383
template = 'admin_user_stats/modules/chart.html'
8484
chart_size = "580x100"
8585
days = None
86+
values_count = 10 #use either days or values_count
8687
interval = 'days'
8788
queryset = Activity.objects.filter(kitten=True).exclude(active=None)
8889
date_field = 'activity_date'
90+
aggregate = Sum('amount')
8991

9092
BaseCharts
9193
---------

admin_user_stats/base_modules.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: utf-8 -*-
22
from datetime import timedelta
3+
from django.db.models import Count
34
from django.utils.translation import ugettext_lazy as _
45
try:
56
from django.utils.timezone import now
@@ -21,9 +22,11 @@ class BaseChart(modules.DashboardModule):
2122
template = 'admin_user_stats/modules/chart.html'
2223
chart_size = "580x100"
2324
days = None
25+
values_count = 30
2426
interval = 'days'
2527
queryset = None
2628
date_field = 'date_joined'
29+
aggregate = Count('id')
2730

2831
def is_empty(self):
2932
return False
@@ -32,7 +35,7 @@ def __init__(self, *args, **kwargs):
3235
super(BaseChart, self).__init__(*args, **kwargs)
3336

3437
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]
3639

3740
self.data = self.get_data(self.interval, self.days)
3841
self.prepare_template_data(self.data)
@@ -42,12 +45,13 @@ def get_caption(self, dt):
4245
'days': dt.day,
4346
'months': dt.strftime("%b"),
4447
'weeks': dt.strftime('%W'),
48+
'years': dt.strftime('%Y'),
4549
}[self.interval]
4650

4751
# @cached(60*5)
4852
def get_data(self, interval, days):
4953
""" 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)
5155
today = now()
5256
begin = today - timedelta(days=days-1)
5357
return stats.time_series(begin, today+timedelta(days=1), interval)
@@ -75,4 +79,5 @@ def get_charts(self):
7579
self.chart_model(_('By Day'), interval='days'),
7680
self.chart_model(_('By Week'), interval='weeks'),
7781
self.chart_model(_('By Month'), interval='months'),
82+
self.chart_model(_('By Year'), interval='years'),
7883
]

0 commit comments

Comments
 (0)