2016-04-19 4 views
1

Я новичок в django-rest-framework. Я ищу решение, но не могу найти свое прямое решение и застрял. Помощь будет сердечно принята.пользовательский ответ json после создания пользователя в каркасе отдыха django

Я получаю ответ .json как это после создания ScreenShotUser модели:

{ 
    "id": 1, 
    "name": "amir", 
    "age": "30" 
} 

Но я хочу, чтобы получить выход .json вроде следующего:

{ 
    "success": "True", 
    "message": "Successfully sent", 
    "user": { 
    "id": 1, 
    "name": "amir", 
    "age": "30" 
    } 
} 

ScreenShotUser.py

class ScreenShotUser(models.Model): 
     name = models.CharField(max_length=30) 
     age = models.CharField(max_length=30) 

ScreenShotUserSerializer.py

ScreenShotUserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ScreenShotUser 
     fields = '__all__' 

UserViewSet.py

class UserViewSet(viewsets.ModelViewSet): 
    queryset = ScreenShotUser.objects.all() 
    serializer_class = UserSerializer 

Я использую Джанго restframework 3.3.2. TIA

ответ

3

По умолчанию ModelViewSet возвращает вновь созданную сериализованную модель в ответ на POST запрос.

Если вы хотите все просит иметь другую структуру, что сериализованная модель, проверьте решение Niranj. Тем не менее, если вам нужна конкретная структура ответа только для этого запроса, вам необходимо переопределить метод .create() ваш взгляд в:

class UserViewSet(viewsets.ModelViewSet): 
    ... 

    def create(self, request, *args, **kwargs): 
     serializer = self.get_serializer(data=request.data) 
     serializer.is_valid(raise_exception=True) 
     self.perform_create(serializer) 
     headers = self.get_success_headers(serializer.data) 

     # Define how would you like your response data to look like. 
     response_data = { 
      "success": "True", 
      "message": "Successfully sent", 
      "user": serializer.data 
     } 
     return Response(response_data, status=status.HTTP_201_CREATED, headers=headers) 
+0

Благодарим вас за ответ. Я пробовал с этим. но получил ошибку: «create() не возвращал экземпляр объекта». – Amir

+0

Я работал для меня последним. Я был неправ. ошибка для моей ошибки. Большое спасибо. – Amir

0

Думаю, вам нужно дать метаданные о том, как должен быть ваш ответ json. Пожалуйста, проверьте это http://www.django-rest-framework.org/api-guide/metadata/ Дополнительная информация

+0

Я не могу понять, как я могу осуществить это с моей проблемой. не могли бы вы дать мне список примеров? – Amir

0

Использовать данные как dict. и теперь обновлять его с пользовательскими данными

data = { 
    "success": "True", 
    "message": "Successfully sent", 
    #serializer.data or anything that return user data dict 
    "user": serializer.data 
} 
+0

Thaks. Я попытался, но получил ошибку, как \t «create() не возвращал экземпляр объекта». – Amir

Смежные вопросы