TARUN SHARMA
TARUN SHARMA

Reputation: 107

Update User REST framework Django

I need to update my user in REST framework

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)

response: DETAIL: Key (username)=() already exists.

enter image description here

Upvotes: 3

Views: 107

Answers (3)

tagette
tagette

Reputation: 68

I found this post where someone has a similar problem as you: Django Rest Framework unable to parse multipart/form data

It seems on your picture that you are putting something into Headers tab. Postman is taking care of that for you, so you shouldn't define anything there. Could you try again without setting anything in the headers?

Upvotes: 1

tarun sharma
tarun sharma

Reputation: 57

@YKH is right this code is good there may error in your POST data.

In your image, you are passing two parameters in Header. It could possible you are passing the wrong header. Content-Type should not be for form-data

Upvotes: 1

Ykh
Ykh

Reputation: 7717

   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)

Upvotes: 2

Related Questions