2016-03-20 3 views
0

Ich verwende Django Serializer für die Serialisierung der Modelldaten in JSON.
Zum Beispiel: - Ich habe ein Modell (CHECKTYPE), das ein Feld "Typen" enthält.
Jetzt "Typen" enthält Komma (,) getrennte Elemente wie "test, test1, test2".Django Serializer - Felder Attributwert hinzufügen/aktualisieren

Ich verwende Django Serializer wie unten (irgendwo in view.py):

gettypes = CHECKTYPE.objects.all() 
mytypes = serializers.serialize("json", gettypes) 
return HttpResponse(mytypes, content_type="application/json") 

Das gibt mir eine JSON auf Web-Seite wie unten:

[{"model": "porttype.CHECKTYPE", "pk": "xyz00000005", "fields": {"types": "test, test1, test2"}}] 

Hier möchte ich manipulieren Sie die Feldattribute, bevor Sie die Daten serialisieren.
Zum Beispiel: Ich möchte ein weiteres Attribut in den Feldern 'lasttype' hinzufügen, das der letzte Index der Liste sein wird, wenn ich die 'Typen' durch Komma spalte.

lasttype = types.split(',')[-1] 

so final json Antwort sollte wie folgt aussehen:

[{"model": "porttype.CHECKTYPE", "pk": "xyz00000005", "fields": {"types": "test, test1, test2", "lasttype":"test2"}}] 

Ich habe versucht, dies wie unten zu tun, aber es funktioniert nicht:

gettypes = CHECKTYPE.objects.all() 
updated_types = [] 
for mtype in gettypes: 
    mtype.lasttype = mtype.types.split(',')[-1] 
    updated_types.append(mtype) 
mytypes = serializers.serialize("json", updated_types) 
return HttpResponse(mytypes, content_type="application/json") 

Aber das funktioniert nicht. Es gibt mir dieselbe JSON-Antwort und zeigt nicht das Attribut 'lasttype' an. Bitte lassen Sie mich wissen, ob es eine Möglichkeit gibt, dies zu erreichen.

Danke,
Shashank

Antwort

0

Der beste Weg, um die Antwort, die Sie senden ist durch das Laden der json dict dann Modifizieren der dict, dann wieder json Dumps die Daten für die Antwort zu ändern.

0

Anstatt Felder vor der Serialisierung zu ändern, sollten Sie die Felder nach der Serialisierung ändern.

import json 
mytypes = json.loads(serializers.serialize("json", gettypes)) 
updated_types = [] 
for mytype in mytypes: 
    last_type = mytype['fields']['types'].split(',')[-1] 
    mytype['fields']['lasttype'] = last_type 
    updated_types.append(mytype) 
return JsonResponse(updated_types) 

von JsonResponse verwenden, können Sie direkt json Daten, ohne die dict oder list erneut serialisiert.

Die erwarteten Daten sollen wie folgt sein:

'[{"pk": "xyz00000005", "model": "porttype.CHECKTYPE", "fields": {"lasttype": " test2", "types": "test, test1, test2"}}]' 
+0

Dank. Dies behebt mein Problem (ich muss safe = False in JsonResponse für die Anzeige der Liste hinzufügen). –

+0

Sie können die Antwort als akzeptiert markieren, wenn Sie wollen :) – v1k45

Verwandte Themen