Mam następujący kod do serializacji zestawu zapytań;
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
mimetype="application/json")
A następujące jest moje 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',.........]}]
Które muszę serializować. Ale mówi, że nie można serializować <Product: hederello ()>
. Ponieważ lista składa się zarówno z obiektów django, jak i nakazów. Jakieś pomysły ?
Odpowiedzi:
simplejson
ijson
nie działa dobrze z obiektami django.Wbudowane serializatory Django mogą serializować tylko zestawy zapytań wypełnione obiektami django:
W twoim przypadku
self.get_queryset()
zawiera mieszankę obiektów django i dykt wewnątrz.Jedną z opcji jest pozbycie się instancji modelu w programie
self.get_queryset()
i zastąpienie ich dyktami za pomocąmodel_to_dict
:Mam nadzieję, że to pomoże.
źródło
'NoneType' object has no attribute 'concrete_model'
pojawia się błąd -> ... I używając Django 1.4+safe
tage. stackoverflow.com/a/57939897/4157431Najłatwiej jest użyć JsonResponse .
W przypadku zestawu zapytań należy przekazać listę elementów
values
dla tego zestawu zapytań, na przykład:źródło
Odkryłem, że można to zrobić w dość prosty sposób, używając metody „.values”, która również daje nazwane pola:
Aby uzyskać dane jako iterowalne, należy użyć „list”, ponieważ typ „value queryset” jest dyktowany tylko wtedy, gdy jest wybierany jako iterowalny.
Dokumentacja: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#values
źródło
list()
nadal jest najwyraźniej potrzebne.Od wersji 1.9 Łatwiejszy i oficjalny sposób pobierania json
źródło
Nasz programista js poprosił mnie o zwrócenie jej dokładnych danych w formacie JSON zamiast ciągu zakodowanego w formacie JSON.
Poniżej znajduje się rozwiązanie (zwróci to obiekt, który może być używany / przeglądany bezpośrednio w przeglądarce)
źródło
HttpResponse(tmpObj)
Najpierw dodałem metodę to_dict do mojego modelu;
Więc mam to;
i wreszcie użyj tej klasy do serializacji mojego zestawu zapytań.
Działa to całkiem dobrze
źródło