J'ai le code suivant pour sérialiser le jeu de requêtes;
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
mimetype="application/json")
Et le suivant est mon 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',.........]}]
Ce dont j'ai besoin pour sérialiser. Mais il dit impossible de sérialiser le fichier <Product: hederello ()>
. Parce que liste composée à la fois d'objets django et de dictées. Des idées ?
Réponses:
simplejson
etjson
ne fonctionne pas bien avec les objets django.Les sérialiseurs intégrés de Django ne peuvent sérialiser que des ensembles de requêtes remplis d'objets django:
Dans votre cas,
self.get_queryset()
contient un mélange d'objets django et de dictées à l'intérieur.Une option consiste à supprimer les instances de modèle dans le
self.get_queryset()
et à les remplacer par des dictionnaires en utilisantmodel_to_dict
:J'espère que cela pourra aider.
la source
'NoneType' object has no attribute 'concrete_model'
... Et utilisation de Django 1.4+safe
tage. stackoverflow.com/a/57939897/4157431Le moyen le plus simple est d'utiliser un JsonResponse .
Pour un ensemble de requêtes, vous devez transmettre une liste des
values
pour cet ensemble de requêtes, comme ceci:la source
J'ai trouvé que cela peut être fait assez simple en utilisant la méthode ".values", qui donne également des champs nommés:
"list" doit être utilisé pour obtenir des données comme itérables, puisque le type "value queryset" n'est qu'un dict s'il est choisi comme iterable.
Documentation: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#values
la source
list()
est toujours apparemment nécessaire.À partir de la version 1.9 Un moyen plus simple et officiel d'obtenir json
la source
Notre programmeur js m'a demandé de lui renvoyer les données exactes au format JSON au lieu d'une chaîne encodée en json.
Vous trouverez ci-dessous la solution (cela renverra un objet qui peut être utilisé / affiché directement dans le navigateur)
la source
HttpResponse(tmpObj)
J'ai d'abord ajouté une méthode to_dict à mon modèle;
Alors j'ai ceci;
et enfin utiliser cette classe pour sérialiser mon jeu de requêtes.
Cela fonctionne assez bien
la source