java - 如何访问DRF服务器端的请求主体模型字段?

标签 java android python json django-rest-framework

在 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 客户端引用字段 senderIdreceiverId

最佳答案

请求数据位于请求对象的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/

相关文章:

java - 检查字谜时出现奇怪的比较问题

android - 在设备离线时 checkin 应用程序购买

android - 为当前的 Android 手机创建模拟器

python - 在Python中匹配以特定扩展名结尾的文件名的简洁方法?

python - pygame程序中未打印字体

python - 在pyspark中连接单个RDD中的两个字符串以形成新的RDD

java - 阅读 OPC 值(value)观 Utgard

java - sysout 中的 concat char 给出奇怪的输出?

java - 从父类对象调用子类方法的最佳实践

android - Android Docx4J Gradle:尽管排除了类org.slf4j