/ / Как да промените json стойността, генерирана от ModelSerializer в Django Rest Framework - django, django-rest-framework

Как да промените стойността на json, генерирана от ModelSerializer в Django Rest Framework - django, django-rest-framework

Създадох следния сериализатор:

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

Аз също въведох методите за създаване и актуализиране. Сега, ако се опитам да създам потребител със следните данни:

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

Бих получил следния отговор на json:

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

Това, което бих искал да има, е реакция на JSON, която има атрибут, показващ дали операцията е успешна, както следва:

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

Ако възникне грешка, отговорът ще изглежда така:

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

и не трябва да бъде така:

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

Причината, поради която правя това, е да подобря обработката на грешките от предната страна.

Отговори:

0 за отговор № 1

В класа Meta бихте могли да добавите extra_kwargs като extra_kwargs = {"success": True}

Моля, вижте документацията тук: http://www.django-rest-framework.org/api-guide/serializers/#additional-keyword-arguments

Надявам се това да помогне. Но съм съгласен с Zhandos Zhylkaidar относно проверката на HTTP кода за HTTP грешки.


0 за отговор № 2

Тъй като променяте резултата, трябва да отмените рендер така че да обвива съдържанието на сериализатора в:

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