Krisnadi
Krisnadi

Reputation: 681

Django rest framework add dict to serializer

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

Answers (1)

Sardorbek Imomaliev
Sardorbek Imomaliev

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

Related Questions