Дни разделения и среднее значение в queryset для диаграммы

I just have a queryset that return collection of records that have amount, I wanna show chart by average in everyday . это мой код, но я думаю, что он действительно ужасен для производительности.
есть советы, чтобы сделать его лучше?

month_query = table.objects.filter(time__gt=datetime.now() - timedelta(30))
for day in range(1, 32):
        cnt = 0
        amount = 0
        amount_avg = 0
        for obj in month_query:
            if obj.time.day == day:
                amount += obj.amount
                cnt += 1
        if cnt > 0:
            amount_avg = amount / cnt
        month_days_avg.insert(day, amount_avg)

1 ответ

  1. Вы можете использовать valuesи annotateпозволить django сделать это:

    from django.db.models import Avg
    month_days_avg = MyModel.objects.filter(time__gt=datetime.now() - timedelta(30)).values('time').annotate(average_amount=Avg('amount'))
    

    Приведенный выше запрос приведет к списку дат и средних значений