Как добавить новые данные в request.data? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь добиться добавления 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)

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Вы можете сделать

serializer = MessageSerializer(data={**request.data, 'sid': new_message.sid})
0 голосов
/ 16 апреля 2019

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...