【问题标题】:"Expected a list of items but got type \"dict\"."“应为项目列表,但输入 \"dict\"。”
【发布时间】:2019-08-22 07:40:32
【问题描述】:

我正在尝试构建一个 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)

是因为我希望只有登录用户才能修改其详细信息的功能。

【问题讨论】:

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


    【解决方案1】:

    错误在这里

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

    改成

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

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

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 2021-05-03
      • 2013-08-07
      • 1970-01-01
      相关资源
      最近更新 更多