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
Post a Comment