“需要一个项目列表,但类型为“dict”。”

VIB*_*YAL 4 python django django-models django-views django-rest-framework

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

{
    "non_field_errors": [
        "Expected a list of items but got type \"dict\"."
    ]
}
Run Code Online (Sandbox Code Playgroud)

我编写了以下 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)
Run Code Online (Sandbox Code Playgroud)

上述请求的序列化程序是:

class UserUpdateSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields: ('id', 'first_name', 'last_name')
Run Code Online (Sandbox Code Playgroud)

我试图传递我的请求正文的格式是:

{
    "first_name": "A",
    "last_name": "B"
}
Run Code Online (Sandbox Code Playgroud)

使用的原因

实例 = User.objects.filter(id=self.request.user.id)

是因为我想要的功能只有登录用户才能修改他的详细信息。

Jib*_*ews 5

错误在这里

serializer = UserUpdateSerializer(instance, data=request.data, many=True)
Run Code Online (Sandbox Code Playgroud)

改成

serializer = UserUpdateSerializer(instance, data=request.data)
Run Code Online (Sandbox Code Playgroud)

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