Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modifying value on serialization - Django Rest Framework

I have a model which contains sensitive data, let's say a social security number, I would like to transform that data on serialization to display only the last four digits.

I have the full social security number stored: 123-45-6789. I want my serializer output to contain: ***-**-6789

My model:

class Employee (models.Model):

    name  = models.CharField(max_length=64,null=True,blank=True)
    ssn   = models.CharField(max_length=16,null=True,blank=True)

My serializer:

class EmployeeSerializer(serializers.ModelSerializer):

    id = serializers.ReadOnlyField()

    class Meta:
        model = Employee

        fields = ('id','ssn')

        read_only_fields = ['id']
like image 551
Codewise Avatar asked May 19 '18 16:05

Codewise


1 Answers

You can use SerializerMethodField:

class EmployeeSerializer(serializers.ModelSerializer):

    id = serializers.ReadOnlyField()
    ssn = SerializerMethodField() 

    class Meta:
        model = Employee

        fields = ('id','ssn')

        read_only_fields = ['id']

    def get_ssn(self, obj):
         return '***-**-{}'.format(obj.ssn.split('-')[-1]
like image 67
neverwalkaloner Avatar answered Sep 18 '22 17:09

neverwalkaloner