字符串索引必须是整数 django rest 框架

我有一个很大的序列化json字段,我试图从中提取多个键,然后构造另一个键json并通过请求发送它。


例子:


class ACtionViewSet(viewsets.ModelViewSet):

    logger = logging.getLogger('django')


    """

    API endpoint

    """

    queryset = Action.objects.all()

    serializer_class = ActionSerializer

    filter_backends = (filters.OrderingFilter,

                       filters.SearchFilter, DjangoFilterBackend)

    filterset_class = ActionFilter


    # create new action for this workflow

    def create(self, request, *args, **kwargs):

        serializer = ActionSerializer(data=request.data, context={'request': request})

        if serializer.is_valid():

            serializer.save()

            encode_data = json.dumps(serializer.data)

            wanted_key = ['task', 'task_default', 'slug']

            new_action = {x: encode_data[x] for x in wanted_key if x in encode_data}

            print(new_action)

            workflow = json.dumps(new_action)

            response = requests.post(

                url='{}/workflows'.format(MISTRAL_URL),

                json=workflow,

                headers=headers

            )

            # logging.debug(f"{self.response}")

            return Response({'response': response}, status=status.HTTP_200_OK)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

错误是


string indices must be integers


我有点困惑为什么会发生这种情况,所以有人可以解释一下这里发生了什么,谢谢


POPMUISE
浏览 146回答 2
2回答

皈依舞

该错误告诉您必须使用整数作为字符串索引,即"some string"[0]有效,"some string"['test']会引发上述问题。这给了你一个看哪里的提示!即,encode_data是由 生成的字符串 json.dumps。您可能可以删除json.dumps, 或者使用json.loadsifserialiser.data是一个字符串。换句话说:$ json.loads('{"foo": 123}')['foo']> 123$ json.dumps({'foo': 123})['foo']> TypeError: string indices must be integers

qq_花开花谢_0

json.dumps返回一个字符串,意思encode_data是一个字符串,而不是一个字典。如果serializer.data已经是一个字典,就按原样使用它,如果它是一个字符串使用json.loads(serializer.data)在这一行上触发了错误:new_action = {x: encode_data[x] for x in wanted_key if x in encode_data}在 python 中,字符串是可迭代的,但只能通过整数键访问,如列表。my_string = "01234" my_char = my_string[3] # result is "3"但您正在尝试像这样访问它:my_data = my_string["key"]这不起作用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python