Django Ежемесячная / квартальная группировка данных DateField () - PullRequest
3 голосов
/ 11 октября 2010

У меня есть модель django, которая содержит, помимо прочего, атрибут DateField () :

class Table():
    date = models.DateField()
    value = models.FloatField()

Я пишу представление, которое группирует эти данные по неделям, месяцам, кварталам и годам. Я жестко запрограммировал вычисление, которое достаточно просто вычисляет мою месячную стоимость - складывая все значения за этот месяц и деля их на количество записей - но я чувствую, что должен быть более элегантный способ сделать это.

То, к чему я стремлюсь, выглядит примерно так:

get_monthly(Table.objects.all())
>>> [123, 412, 123, 534, 234, 423, 312, 412, 123, 534, 234, 423]
get_quarterly(Table.objects.all())
>>> [123, 412, 123, 534]

Где значения в списке являются средними значениями каждого месяца.

Кто-нибудь может мне помочь?

1 Ответ

3 голосов
/ 11 октября 2010

Вы можете сделать это, используя возможности запросов модели.Вот пример для ежемесячного запроса:

from django.db.models import Avg
Table.objects.extra(select={'month':"strftime('%m',date)"}).values('month').annotate(Avg('value'))

Где вы можете изменить strftime('%m',date) на month(date) или любое другое вычисление, в зависимости от вашей функциональности datetime вашей базы данных.

...