2017-07-27 14 views
0

は、私がContactRequestの本体と、サーバエンドポイントに要求を行います。DRFサーバー側のリクエストボディモデルフィールドにアクセスする方法は?アンドロイドクライアント側で

public class ContactRequest { 

    @SerializedName("senderId") 
    @Expose 
    private int senderId; 

    @SerializedName("receiverId") 
    @Expose 
    private int receiverId; 

    public ContactRequest(int senderId, int receiverId) { 
     this.senderId = senderId; 
     this.receiverId = receiverId; 
    } 
} 

私がリクエストボディとしてこのオブジェクトを渡し改造使用:サーバー上で

@POST("friendship/create-friend-request/") 
Call<Void> sendRequest(@Body ContactRequest contactRequest); 

を要求がこのエンドポイントaに行われたときしかし

class CreateFriendRequestView(views.APIView): 

    def post(self, request, *args, **kwargs): 
     sender = User.objects.get(pk=request.senderId) 
     receiver = User.objects.get(pk=request.receiverId) 
     Friend.objects.add_friend(sender, receiver) 
     return Response({'status': 'Request sent'}, status=201) 

:側が、私はその後、CreateFriendRequestViewにこのエンドポイントをマップビューが呼び出されると、内部サーバーエラー、ステータスコード500が発生します。

AttributeError: 'Request' object has no attribute 'senderId'

どのように私は、Djangoの残りのフレームワーク、クライアント側のsenderIdreceiverIdをフィールドへの参照を行うことができますか?

答えて

1

リクエストデータはdataフィールドオブリクエストオブジェクトです。

チェックアウトhttp://www.django-rest-framework.org/api-guide/requests/#data

あなたが使用する必要があります:

sender = User.objects.get(pk=request.data.get('senderId')) 

request.dataはPythonの辞書です。

+1

ありがとう、代わりに、次のようにしてアクセスできます:request.data ['senderId'] –

+0

はい、正しいです。 'get'メソッドは、指定されたキーがdictに存在しない場合にデフォルト値を与えることができます。例えば: 'request.data.get( 'senderId'、1)' –