2016-04-19 12 views
1

Ich bin neu in Django-Rest-Framework. Ich suche nach einer Lösung, kann aber meine unkomplizierte Lösung nicht finden und bin steckengeblieben. Hilfe wird herzlich angenommen.benutzerdefinierte JSON-Antwort nach dem Erstellen von Benutzer in Django Rest Framework

Ich erhalte eine .json Antwort wie diese nach dem Erstellen ScreenShotUser Modell:

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

Aber ich will eine .json Ausgabe erhalten wie folgt aus:

{ 
    "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 

I django restframework 3.3.2 verwenden. TIA

Antwort

3

standardmäßig die ModelViewSet gibt das neu geschaffene serialisierten Modell als Antwort auf eine Anfrage POST.

Wenn Sie möchten alle Anforderungen eine andere Struktur als das serialisierte Modell haben, überprüfen Sie Niranj's Lösung. wenn Sie eine bestimmte Antwortstruktur für diese Anforderung müssen jedoch nur, müssen Sie die Ansicht der .create() Methode außer Kraft zu setzen:

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

danke für Ihre Antwort. Ich habe es versucht. aber Fehler: "create() hat keine Objektinstanz zurückgegeben." – Amir

+0

Das hat bei mir allen zuletzt funktioniert. Ich habe mich geirrt. Fehler für meinen Fehler. Vielen Dank. – Amir

0

Ich denke, Sie müssen Metadaten angeben, wie Ihre json Antwort sein muss. Bitte überprüfen Sie diese http://www.django-rest-framework.org/api-guide/metadata/ Weitere Informationen

+0

Ich kann nicht verstehen, wie kann ich das mit meinem Problem implementieren. Könnten Sie mir bitte eine Beispielliste geben? – Amir

0

Verwenden Sie Daten als dict. und jetzt aktualisieren Sie es mit Ihren Benutzerdaten

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

Thaks. Ich habe versucht, aber bekam Fehler wie \t "create() hat keine Objektinstanz zurückgegeben." – Amir

Verwandte Themen