Reputation: 681
This is my serializers.py:
class SysUserSerializer(serializers.ModelSerializer):
pk = serializers.IntegerField(read_only=True)
login_id = serializers.CharField(required=False)
name = serializers.CharField(required=False)
class Meta:
model = SysUser
fields = ('pk','login_id','name')
This is my views.py:
class GetUserDetail(APIView):
def get(self, request, format=None):
sysuser = SysUser.objects.get(id=1)
serializer = SysUserSerializer(sysuser)
serializer.data['gender'] = 'male' # i don't think this line is working
return Response(serializer.data, status=200)
But i get this response:
{"pk": 1, "login_id": "john77", "name": "John"}
I want the response like this:
{"pk": 1, "login_id": "john77", "name": "John", "gender": "male"}
How it can be done? is it possible to do so?
Upvotes: 1
Views: 6276
Reputation: 15400
Problem here that serializer.data
is not instance argument, but property
which returns it. So you can fix this by assigning serializer.data
to variable.
class GetUserDetail(APIView):
def get(self, request, format=None):
sysuser = SysUser.objects.get(id=1)
serializer = SysUserSerializer(sysuser)
data = serializer.data
data['gender'] = 'male'
return Response(data, status=200)
Also you can assign data to serializer.data
in validate
method of serializer
Upvotes: 4