python - How to aggregate data in django? -


i have model instance creating every hour:

class entry(models.model):     class meta:         ordering = ['time']      time = models.datetimefield()     no2 = models.floatfield()     co = models.floatfield()     humidity = models.floatfield()     temperature = models.floatfield() 

i want average values days of last month e.g. 30 instances containing average value every day. how realize it? i've wrote method:

def average_for_period(self, start, end):         entries_for_period = entry.objects.filter(time__gte=start, time__lte=end)         average_value = entries_for_period.aggregate(avg('temperature'), avg('no2'), avg('co'), avg('humidity'))         return entry(**average_value) 

what should implement funcionality?

you're doing right except returning value. aggregated query shouldn't entry instance

avg_values = ['temperature', 'no2', 'co', 'humidity'] average_value = entries_for_period.aggregate(*[avg(x) x in avg_values]) return {x:average_value['%s__avg' % x] x in avg_values} 

this return dict like

{'temperature': 202.48803054780439,  'no2': 4881.734909678366,  'co': none,  'humidity': 200} 

Comments