“期望项目列表,但输入的类型为“ dict \”。

时间:2019-04-01 07:30:55

标签: python django django-models django-rest-framework django-views

我正在尝试构建一个用于更新用户名和姓氏的api。我在HTTP响应中收到以下错误

{
    "non_field_errors": [
        "Expected a list of items but got type \"dict\"."
    ]
}

我编写了以下API,并尝试将补丁请求传递给它。

class UserSelfUpdateView(UpdateAPIView):
    serializer_class = UserUpdateSerializer
    permission_classes = [UserPermissions, ]

    def update(self, request: Request, *args, **kwargs):
        instance = User.objects.filter(id=self.request.user.id)
        serializer = UserUpdateSerializer(instance, data=request.data, many=True)
        serializer.is_valid(raise_exception=True)
        serializer.save()

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

上述请求的序列化器为:

class UserUpdateSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields: ('id', 'first_name', 'last_name')

我尝试传递请求正文的格式为:

{
    "first_name": "A",
    "last_name": "B"
}

使用原因

  

instance = User.objects.filter(id = self.request.user.id)

是因为我希望以仅登录用户才能修改其详细信息的方式使用该功能。

1 个答案:

答案 0 :(得分:1)

错误在这里

serializer = UserUpdateSerializer(instance, data=request.data, many=True)

更改为

serializer = UserUpdateSerializer(instance, data=request.data)

如果传递many=True,则需要传递查询集而不是实例