Créer de la Réponse JSON dans Django avec le Modèle
J'ai quelques question ici. Je suis en train de retourner une réponse JSON fait d'un message et d'une instance du modèle:
class MachineModel(models.Model):
name = models.CharField(max_length=64, blank=False)
description = models.CharField(max_length=64, blank=False)
manufacturer = models.ForeignKey(Manufacturer)
added_by = models.ForeignKey(User, related_name='%(app_label)s_%(class)s_added_by')
creation_date = models.DateTimeField(auto_now_add=True)
last_modified = models.DateTimeField(auto_now=True)
machine_model_model = form.save(commit=False)
r_user = request.user.userprofile
machine_model_model.manufacturer_id = manuf_id
machine_model_model.added_by_id = request.user.id
machine_model_model.save()
alert_message = " The'%s' model " % machine_model_model.name
alert_message += ("for '%s' " % machine_model_model.manufacturer)
alert_message += "was was successfully created!"
test = simplejson.dumps(list(machine_model_model))
data = [{'message': alert_message, 'model': test}]
response = JSONResponse(data, {}, 'application/json')
class JSONResponse(HttpResponse):
"""JSON response class."""
def __init__(self, obj='', json_opts={}, mimetype="application/json", *args, **kwargs):
content = simplejson.dumps(obj, **json_opts)
super(JSONResponse,self).__init__(content, mimetype, *args, **kwargs)
Mais je reçois:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 178, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <MachineModel: "Test12"> is not JSON serializable
Pourquoi est-ce? J'ai vu avant:
models = Model.objects.filter(manufacturer_id=m_id)
json = simplejson.dumps(models)
et qui fonctionne... quelle est la différence?!
Merci!
OriginalL'auteur abisson | 2012-09-23
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser django sérialiseurs au lieu de
simplejson
:Par exemple, cela renvoie correctement les données sérialisées:
Il est actuellement objet JSON. Vous pouvez désérialiser sur un modèle. Par jquery, par exemple:
jQuery.parseJSON(response)
, qui renvoie un javascript dictionnaire.Ok bon ça marche!!! Mais je reçois toujours un tableau (en JQuery et je dois prendre le premier [0]... Est-ce normal?! Il est un peu ennuyeux. Recommanderiez-vous à un Api REST?!
le deuxième argument de la méthode de sérialisation peut être tout itérateur que les rendements des Django d'instances de modèle (prises à partir de documents), je ne connais pas d'autre méthode pour gérer avec une seule instance du modèle de la sérialisation. Aussi, la caisse de cette la question relative. À propos de l'Api REST - désolé, je ne suis pas compétent dans ce domaine. Btw, j'utilise le même
description
s dans mes projets 🙂OriginalL'auteur Sergey Goliney
Méthode 1: Utilisation de Django reinhardt,
python
sérialiseurJe pense que cette réponse ne renvoie pas une JSON ou un Python dict/objet de la liste. Donc, utilisez le format
python
au lieu dejson
Django shell réponse
Méthode 2: Utilisation de Django reinhardt,
values()
méthodeL'utilisation directe de
values()
méthode jetteraTypeError
exception, afin de convertir lesQuerySet
à un pythonlist
comme ci-dessous,OriginalL'auteur JPG