2012-03-30 21 views
3

Hallo Ich schreibe eine Django-Ansicht, die Daten für die grafische Darstellung auf der Client-Seite (High Charts) ausgibt. Die Daten sind Klimadaten mit einem bestimmten Parameter, der einmal pro Tag aufgezeichnet wird.Django Queryset Aggregat nach Zeitintervall

Meine Frage ist diese:

format = '%Y-%m-%d' 
sd = datetime.datetime.strptime(startdate, format) 
ed = datetime.datetime.strptime(enddate, format) 

data = Climate.objects.filter(recorded_on__range = (sd, ed)).order_by('recorded_on') 

Jetzt, da der Bereich erhöht wird der Datensatz offensichtlich größer wird und dies stellt nicht gut auf dem Graphen (abgesehen von den Dingen nach unten erheblich verlangsamt).

Gibt es eine Möglichkeit, meine Daten als Durchschnitt in Zeiträumen zu gruppieren - speziell Durchschnitt für jeden Monat oder Durchschnitt für jedes Jahr?

Ich weiß, dies in SQL getan werden könnte, wie hier erwähnt: django aggregation to lower resolution using grouping by a date range

Aber ich würde gerne wissen, ob es eine praktische Möglichkeit, in Django selbst ist.

Oder ist es vielleicht besser, die db direkt zu ändern und ein Skript zu verwenden, um Monat und Jahr Felder aus dem Zeitstempel aufzufüllen?

Jede Hilfe sehr geschätzt.

Antwort

3

Haben Sie versucht mit django-qsstats-magic (https://github.com/kmike/django-qsstats-magic)?

Es macht sehr leicht, die Dinge für Charting, hier ist ein Beispiel von Zeitreihen ihre docs:

from django.contrib.auth.models import User 
import datetime, qsstats 

qs = User.objects.all() 
qss = qsstats.QuerySetStats(qs, 'date_joined') 

today = datetime.date.today() 
seven_days_ago = today - datetime.timedelta(days=7) 

time_series = qss.time_series(seven_days_ago, today) 
print 'New users in the last 7 days: %s' % [t[1] for t in time_series] 
+0

hmm. Sieht vielversprechend aus - ich werde es mir ansehen. –

+0

Ist diese Art von Abfrage sogar in normalen Django möglich? –

+0

Ja, Sie können ähnliche Ergebnisse erzielen, wenn Sie User.objects.filter() verwenden. Aggregate(); Offizielle Dokumente finden Sie hier: https://docs.djangoproject.com/de/dev/topics/db/aggregation/ – BluesRockAddict