Reputation: 107
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.
Upvotes: 3
Views: 107
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
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
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