2016-05-24 3 views
0

Was ist der effizienteste Weg, um einen JSON-serialisierbaren Teil des DateTimeField in ein Django-Queryset zu bekommen?Nur einen serialisierbaren JSON-Teil eines DateTimeField in ein Abfrage-Set ziehen?

Größeres Bild ist, dass ich Energiezähler Lesungen (IntegerField) + Datum für mehrere Benutzer speichern und möchte eine eingeloggte Benutzerdaten in einer Django-Graphos-Visualisierung anzeigen. Optimale Flexibilität, um Grafiken zwischen Tag-, Wochen- und Monatsansichten umzuschalten.

Ich habe die Grafik bekam für ein in Benutzer mit der user_kwh integer und der user_id mit der unten in meiner Ansicht angemeldet gut funktionieren:

def graph(request): 
     queryset = MeterReading.objects.filter(user=request.user) 
     data_source = (ModelDataSource(queryset, fields=["user_id", "user_kwh"])) 
     chart = gchart.LineChart(data_source) 
     context = {'chart': chart} 
     return render(request, 'dashboard/index.html', context) 

Aber wenn ich User_id ändern (mein Name user_kwh_timestamp das Datetime-Feld) wirft den Typeerror: "datetime.datetime (2013, 12, 1, 21, 58, 2, Tzinfo =) ist nicht JSON serializable"

Stuff ich habe bisher versucht

  • Ich habe versucht, die Werte in den queryset Serialisierung, bevor sie mit ihnen an die Vorlage vorbei: data_source = serializers.serialize('json', MeterReading.objects.all(), fields=('user_kwh_timestamp',)) aber die gibt einen Attribut sagen ‚Unicode‘ Objekt kein Attribut ‚get_header‘ hat.
  • Ich habe versucht, die queryset enger mit .values_list definieren, aber das sagt „‚datetime.datetime‘Objekt kein Attribut‚user_kwh_timestamp‘hat“
  • ich diese Django Dokumentation mehrere Objekte in einem queryset auf Aktualisierung gefunden haben aber es zeigt nur, wie alle mit 1 Zeichenfolge aktualisieren: https://docs.djangoproject.com/en/1.7/topics/db/queries/#updating-multiple-objects-at-once

von dem Python Datetime-Dokumentation scheint es, dass strftime() und% b oder% x könnte ein Teil der Lösung sein, aber an diesem Punkt I‘ m verwirrt auf wie/wo diese zu implementieren https://docs.python.org/2/library/datetime.html#datetime-objects

Ich bin uns Django 1.7.1 und Python 2.7.6 über ide.c9.io. Erste Codierung Projekt und erste Frage hier entschuldigen so jede Unwissenheit im Inhalt, Stil oder Ansatz :)

Antwort

0

json lib die Ergebniswerte serialisiert seien (von queryset), ein JSON encoder Angabe in diesem Fall DjangoJSONEncoder. Sie müssen queryset vor dem Serialisieren in eine Liste umwandeln oder eine Ausnahme erhalten.

import json 
from django.core.serializers.json import DjangoJSONEncoder 

... 

def graph(request): 
    queryset = MeterReading.objects.filter(user=request.user).values() 
    data = json.dumps(list(queryset), cls=DjangoJSONEncoder) 
    ... 
+0

danke mauro! das heraufgezogene "str" ​​-Objekt hat kein Attribut "user_kwh_timestamp" von graphos/sources/model.py in get_field_values ​​(ich habe das "has not attribute" öfter gesehen). obwohl wenn ich eine andere –

+0

[bearbeitet für mehr als 5 Minuten ..] so während wir eine Liste jetzt erstellt haben, habe ich versucht mit SimpleDataSource Graphos anstelle von ModelDataSource. Es werden keine Fehler angezeigt, die Visualisierung wird jedoch in google.visualization.arrayToDataTable ("[{\ user_id": 1, "id": 1, "user_kwh": 49520, "user_kwh_timestamp": \ "2013-12-01T21: 58: 02Z \"}, während die Struktur in die Richtung von google.visualization.arrayToDataTable ([["user_kwh_timestamp", "user_kwh"], [2013-12-01T21: 58] 02Z, 49520] usw. –

Verwandte Themen