在 Android 客户端,我向服务器端点发出请求,其正文为 ContactRequest
:
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);
然后,在服务器端,我将此端点映射到 CreateFriendRequestView
:
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)
但是,当向此端点发出请求并调用 View 时,会出现内部服务器错误,状态代码 500。
AttributeError: 'Request' object has no attribute 'senderId'
如何在 django Rest Framework 客户端引用字段 senderId
和 receiverId
?
最佳答案
请求数据位于请求对象的data
字段中。
结帐http://www.django-rest-framework.org/api-guide/requests/#data
你必须使用:
sender = User.objects.get(pk=request.data.get('senderId'))
request.data是一个Python字典。
关于java - 如何访问DRF服务器端的请求主体模型字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350110/