如何向request.data添加新数据?

问题描述 投票:0回答:2

我想要实现的是将sid添加到request.data所以我可以将它添加到我的序列化器中,但我不完全确定如何实现这一点。我可以以某种方式附加它或者我是否必须为sid设置单独的序列化器?

class Test001(APIView):
    def __init__(self):
        self.account_sid = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
        self.auth_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
        self.twilio_number = 'whatsapp:+14XXXXXXXX'
        self.to_number = 'whatsapp:+14XXXXXXXXX'

    def post(self, request):


        client = Client(self.account_sid, self.auth_token)

        new_message = client.messages.create(
                                from_=self.twilio_number,
                                body=message,
                                to=self.to_number
                            )
        sid = new_message.sid

        serializer = MessageSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
python django
2个回答
2
投票

你可以做

serializer = MessageSerializer(data={**request.data, 'sid': new_message.sid})

0
投票

request.data只是一本字典。您只需使用新项目更新它即可。

sid = new_message.sid
data = request.data
data["sid"] = sid
serializer = MessageSerializer(data)

如果你使用request.POSTrequest.GET就会出现问题,因为它们是不可变对象。在这种情况下,您首先通过创建副本然后使用新项目更新它来删除不变性。

sid = new_message.sid
data = request.POST.copy()  #data is now a mutable object.
data["sid"] = sid
serializer = MessageSerializer(data)
© www.soinside.com 2019 - 2024. All rights reserved.