2010-10-11 3 views
2

У меня есть модель Джанго, которая содержит, среди прочего, DateField() атрибут:Джанго Ежемесячно/Квартальная группировка 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] 

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

Может ли кто-нибудь мне помочь?

ответ

2

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

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

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

Смежные вопросы