更新用户REST框架Django

3

我需要在REST框架中更新我的用户。

views.py

class UserUpdate(APIView):
    permission_classes = (permissions.IsAuthenticated,)

    def post(self,request):
        user=User.objects.get(id=request.user.id)
        try:
            user_serializer=UserSerializer(request.user,data=request.data, partial=True)
            if user_serializer.is_valid():
                user_serializer.save()
                return Response(user_serializer.data, status=status.HTTP_201_CREATED)
            else:
                return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        except:
            return JsonResponse({'status':0,'message':'Error on user update'})

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'first_name', 'last_name', 'avatar']

models.py

class User(AbstractUser):
    fb_userid = models.CharField(max_length=256)
    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)

响应: 详情: 用户名已存在(key (username)=())。

在此输入图片描述


展示你的完整视图类。 - Sardorbek Imomaliev
3个回答

2
   def post(self,request):
        user_serializer=UserSerializer(request.user, data=request.data, partial=True)
        if user_serializer.is_valid():
            user_serializer.save()
            return Response(user_serializer.data, status=status.HTTP_200_OK)
        else:
            return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

{ "id": 2, "first_name": "", "last_name": "", "avatar": null } 请查看Postman图片。 - TARUN SHARMA
您所请求的URL是update_user,这个URL是否连接到这个POST方法? - Ykh
是的,我正在尝试使用此URL发布数据。 - TARUN SHARMA
但是您仍然得到未更改的用户吗?您可以在 if user_serializer.is_valid() 内部打印 print(request.data, user_serializer.validated_data) 并将其发布到问题中。 - Ykh
<QueryDict: {' name': ['"first_name"\r\n\r\nTarun\r\n------WebKitFormBoundaryeZV6EJv4GBVHzMQS--\r\n'], '------WebKitFormBoundaryeZV6EJv4GBVHzMQS\r\nContent-Disposition: form-data': ['']}> - TARUN SHARMA
代码没问题,你发布的数据肯定有些错误。 - Ykh

1

@YKH是对的,这段代码很好,你的POST数据可能有误。

在你的图片中,你传递了两个参数在Header中。可能是你传递了错误的头信息。 Content-Type不应该用于form-data。


1

我找到了一篇帖子,其中有人遇到了与您类似的问题:Django Rest Framework无法解析multipart/form数据

从您的图片上看,您正在将某些内容放入“Headers”选项卡中。Postman已经为您处理了这个问题,因此您不需要在那里定义任何内容。您可以尝试不设置任何头信息再次发送请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接