Ich habe den folgenden Code zum Serialisieren des Abfragesatzes;
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
mimetype="application/json")
Und folgendes ist mein get_querset()
[{'product': <Product: hederello ()>, u'_id': u'9802', u'_source': {u'code': u'23981', u'facilities': [{u'facility': {u'name': {u'fr': u'G\xe9n\xe9ral', u'en': u'General'}, u'value': {u'fr': [u'bar', u'r\xe9ception ouverte 24h/24', u'chambres non-fumeurs', u'chambres familiales',.........]}]
Was ich serialisieren muss. Aber es heißt nicht in der Lage, die zu serialisieren <Product: hederello ()>
. Weil die Liste sowohl aus Django-Objekten als auch aus Diktaten besteht. Irgendwelche Ideen ?
python
django
json
serialization
django-class-based-views
Thunfisch
quelle
quelle
Antworten:
simplejson
undjson
arbeite nicht gut mit Django-Objekten.Die in Django integrierten Serialisierer können nur mit Django-Objekten gefüllte Abfragesätze serialisieren:
In Ihrem Fall
self.get_queryset()
enthält eine Mischung aus Django-Objekten und Diktaten im Inneren.Eine Möglichkeit besteht darin, Modellinstanzen in der
self.get_queryset()
Datei zu entfernen und sie durch Dikte zu ersetzen, indem Sie Folgendes verwendenmodel_to_dict
:Hoffentlich hilft das.
quelle
'NoneType' object has no attribute 'concrete_model'
... und mit Django 1.4+safe
Um das direkt in JS zu verwenden, verwenden Sie einfach das tage. stackoverflow.com/a/57939897/4157431Am einfachsten ist es, eine JsonResponse zu verwenden .
Für ein Abfrageset sollten Sie eine Liste der
values
für dieses Abfrageset folgenden übergeben:quelle
Ich fand, dass dies ziemlich einfach mit der Methode ".values" gemacht werden kann, die auch benannte Felder enthält:
"list" muss verwendet werden, um Daten als iterierbar abzurufen, da der Typ "value queryset" nur dann ein Diktat ist, wenn er als iterierbar aufgenommen wird.
Dokumentation: https://docs.djangoproject.com/de/1.7/ref/models/querysets/#values
quelle
list()
anscheinend immer noch benötigt.Ab Version 1.9 Einfachere und offizielle Methode, um json zu bekommen
quelle
Unser js-Programmierer hat mich gebeten, ihr die genauen Daten im JSON-Format anstelle einer json-codierten Zeichenfolge zurückzugeben.
Unten finden Sie die Lösung. (Dadurch wird ein Objekt zurückgegeben, das direkt im Browser verwendet / angezeigt werden kann.)
quelle
HttpResponse(tmpObj)
Zuerst habe ich meinem Modell eine to_dict-Methode hinzugefügt.
Dann habe ich das;
und benutze endlich diese Klasse, um mein Abfrageset zu serialisieren.
Das funktioniert ganz gut
quelle