/ / Comment modifier la valeur json générée par ModelSerializer dans Django Rest Framework - django, django-rest-framework

Comment modifier la valeur json générée par ModelSerializer dans Django Rest Framework - django, django-rest-framework

J'ai créé le sérialiseur suivant:

class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = get_user_model()
fields = (
"url", "username", "email", "password",
)
write_only_fields = ("password",)

J'ai également implémenté les méthodes de création et de mise à jour. Maintenant, si j'essaie de créer un utilisateur avec les données suivantes:

{
"username": "foo",
"email": "foo@thefoo.net",
"password": "foo2016"
}

J'obtiendrais la réponse json suivante:

{
"url": "http://someurl.com/catalog/api/users/11/",
"username": "foo",
"email": "foo@thefoo.net"
}

Ce que je voudrais, c'est une réponse JSON qui a un attribut indiquant si l'opération est réussie, comme suit:

{
"success": true,
"data": {
"url": "http://someurl.com/foo/users/11/",
"username": "foo",
"email": "foo@thefoo.net"
}
}

Si une erreur se produisait, la réponse ressemblerait à ceci:

{
"success": false,
"data": {
"username": [
"This field is required."
]
}
}

et ne devrait pas être comme ça:

{
"username": [
"This field is required."
]
}

La raison pour laquelle je le fais est d'améliorer la gestion des erreurs du côté frontal.

Réponses:

0 pour la réponse № 1

Dans la classe Meta, vous pourriez ajouter extra_kwargs comme extra_kwargs = {"success": True}

Veuillez vous référer à la documentation ici: http://www.django-rest-framework.org/api-guide/serializers/#additional-keyword-arguments

J'espère que ça aide. Mais je suis d’accord avec Zhandos Zhylkaidar concernant la vérification du code de réponse HTTP pour les erreurs HTTP.


0 pour la réponse № 2

Comme vous modifiez le résultat, vous devez remplacer le moteur de rendu afin qu'il encapsule le contenu du sérialiseur dans:

{
"success": false/true,
"data": <content>
}