2016-04-19 15 views
1

django-rest-frameworkの初心者です。私は解決策を探していますが、私の単純な解決策を見つけることができず、固まってしまいました。ヘルプは心から受け入れられます。django restフレームワークでユーザを作成した後のカスタムjsonレスポンス

私はScreenShotUserモデルを作成した後、このような.json応答を取得しています:

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

ScreenShotUser.py

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

をしかし、私は次のように.jsonの出力を取得したいです

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 

私は、Djangoのrestframework 3.3.2を使用しています。 TIA

答えて

3

それを更新し、ModelViewSetPOST要求に応答して、新しく作成されたシリアル化されたモデルを返します。

のすべてのリクエストがシリアル化されたモデルとは異なる構造を持つようにしたい場合は、Niranjのソリューションを確認してください。私は私の問題でこれを実装する方法を理解することはできません

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

:あなたが唯一のこの要求に対して特定の応答構造を必要とする場合は、あなたのビューの.create()メソッドをオーバーライドする必要があります。あなたに私のサンプルリストを教えていただけますか? – 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

関連する問題