def render(self, context): # retreiving queryset from admin changelist cl = self.cl.resolve(context) objects = cl.result_list # getting request request = context['request'] # getting stats callables callables = cl.model_admin.get_stats(request, objects) # getting aggregates (to avoid too many db queries) aggregates = models.collect_aggregates(callables) # hit the db for aggregated data data = models.aggregate(objects, aggregates) # calling all stats callbales context[self.varname] = [i(request, objects, data) for i in callables] return u''
def test_aggregates(self): stats = avg, sum_, min_, max_, dummy = self.get_stats() aggregates = models.collect_aggregates(stats) self.assertEqual([type(i) for i in aggregates], [django_models.Avg, django_models.Sum, django_models.Max]) queryset = self.all() data = models.aggregate(queryset, aggregates) self.assertEqual(data['value__avg'], 6.0) self.assertEqual(data['value__sum'], 30) self.assertEqual(data['value__max'], 13) expected_results = [ (u'Average value', 6.0), (u'Total value', 30), (u'Min value', 1), (u'Max value', 13), ('answer', 42), ] results = [i(None, queryset, data) for i in stats] self.assertEqual([tuple(i) for i in results], expected_results)