我想要实现的是将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)
你可以做
serializer = MessageSerializer(data={**request.data, 'sid': new_message.sid})
request.data
只是一本字典。您只需使用新项目更新它即可。
sid = new_message.sid
data = request.data
data["sid"] = sid
serializer = MessageSerializer(data)
如果你使用request.POST
或request.GET
就会出现问题,因为它们是不可变对象。在这种情况下,您首先通过创建副本然后使用新项目更新它来删除不变性。
sid = new_message.sid
data = request.POST.copy() #data is now a mutable object.
data["sid"] = sid
serializer = MessageSerializer(data)