Reputation: 1767
I'm trying to return the details of the current logged in user in the following way:
from .serializers import UserSerializer
class UserDetailsView(RetrieveAPIView):
model = User
queryset = User.objects.all()
permission_classes = [permissions.IsAuthenticated]
serializer_class = UserSerializer
def get(self, request, *args, **kwargs):
user = User.objects.get(id=request.user.id)
print(user)
return Response(user)
in serializers.py I've use ModelSerializer
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
def create(self, validated_data):
user = UserModel.objects.create(username=validated_data['username'])
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = UserModel
fields = ('id', 'username', 'password')
write_only_fields = ('password',)
I get an error Object of type 'User' is not JSON serializable
. What is wrong in my use case?
Upvotes: 5
Views: 13636
Reputation: 703
You need to return
return Response(serializer.data)
in your get function under UserDetailsView. More details here.
Upvotes: 8
Reputation: 628
Please check you are returning value of particular field in serializer get method, not entire user object.
Upvotes: 1
Reputation: 47354
DRF response should be JSON-like objects, to convert model instanse to it you use seralizer class:
def get(self, request, *args, **kwargs):
user = User.objects.get(id=request.user.id)
serializer = self.get_serializer(user)
return Response(serializer.data)
Also you dont need additional query to get current user, you can user request.user
directly:
serializer = self.get_serializer(request.user)
return Response(serializer.data)
Upvotes: 6