serialisiert eine Datetime als Integer-Timestamp

8

Ich möchte, dass django rest mein DateTime-Modellfeld beim Serialisieren nicht in eine String-Datumsrepräsentation konvertiert.

%Vor%

Ich möchte, dass dies als

herauskommt
  

1411880508

und nicht

  

"2014-09-28T05: 01: 48.123"

    
elewinso 28.09.2014, 09:39
quelle

5 Antworten

9

Sie sollten also ein benutzerdefiniertes Serialisierungsfeld schreiben :

%Vor%

Um Schreibvorgänge zu unterstützen, möchten Sie von WritableField erben und auch from_native() implementieren.

    
Tom Christie 29.09.2014, 13:21
quelle
3

Ich konnte Toms Beispiel nicht zur Arbeit bringen und es schien, als würden die Werte nicht geändert. Aber es gab mir einen Ausgangspunkt und nach einigem Lesen fand ich eine Möglichkeit, das gewünschte Ergebnis zu erzielen:

[METHODE 1]

serializers.py

%Vor%

JSON-Ausgabe:

%Vor%

[METHODE 2]

Toms Erklärung und die vorher erwähnte Methode sind definitiv auf dem richtigen Weg mit der Einhaltung von Standards (da die Ergebnisse tatsächlich vom Typ integer sind).

Eine schnelle und schmutzige Lösung besteht jedoch darin, den -Formatparameter für das DateTimeField und stellen Sie den Wert in Sekunden ein.

Beachten Sie, dass dies auf Windows-Rechnern wahrscheinlich nicht funktioniert! Und kann zu einem ValueError: Ungültige Formatzeichenfolge

führen

Um es auszuprobieren, fügen Sie einfach den Schlüsselwortparameter "format" in Ihr Serializer-Feld ein:

serializers.py

%Vor%

JSON-Ausgabe:

%Vor%

Zusätzlich können Sie Mikrosekunden einschließen:

%Vor%

Wenn Sie die Funktionalität in Ihrem eigenen Interpreter testen möchten (um zu überprüfen, ob Ihr Betriebssystem den Parameter% s unterstützt), kopieren Sie einfach diese Zeilen:

%Vor%

Ich denke, diese Methode ist etwas inkonsistent mit der OP-Frage, weil das Ergebnis nicht wirklich vom Typ integer ist, sondern eine String-Repräsentation eines Integers / float - und REST fügt dem Wert möglicherweise Zitate hinzu.

    
Logic1 08.10.2016 01:36
quelle
2

Globale Konfiguration:

%Vor%     
Legolas Bloom 08.06.2017 07:20
quelle
2
%Vor%

Ergebnis in REST wird sein

1) 1517863184.666435

2) 1517863249

    
megajoe 07.02.2018 08:10
quelle
1

Obwohl ich die Antwort von Tom Christie bevorzuge, da sie robuster ist. Ich habe mich entschlossen, meine Lösung zugunsten der potentiellen Leser zu veröffentlichen

%Vor%     
elewinso 29.09.2014 13:39
quelle

Tags und Links