2010-10-11 3 views
2

J'ai un modèle de django qui contient, entre autres, une DateField() attribut:Django mensuel/regroupement quartarly de données DateField()

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

J'écris une vue que les groupes ces données par semaine, mois trimestre et année. J'ai codé en dur un calcul qui obtient ma valeur mensuelle assez simplement - en additionnant toutes les valeurs de ce mois et en divisant par combien d'entrées il y avait - mais je pense qu'il doit y avoir une façon plus élégante de le faire.

Ce que je vise est quelque chose comme ceci:

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] 

Lorsque les valeurs de la liste sont des moyennes de chaque mois.

Quelqu'un peut-il m'aider?

Répondre

2

Vous pouvez le faire en utilisant les fonctionnalités de requête du modèle. Voici un exemple pour la requête mensuelle:

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

Si vous pouvez changer strftime('%m',date) avec month(date) ou tout autre calcul, en fonction de la fonctionnalité de votre base de données datetime.