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.
hmm. Sieht vielversprechend aus - ich werde es mir ansehen. –
Ist diese Art von Abfrage sogar in normalen Django möglich? –
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