Изменение значения при сериализации - Django Rest Framework - PullRequest
0 голосов
/ 19 мая 2018

У меня есть модель, которая содержит конфиденциальные данные, скажем, номер социального страхования, я хотел бы преобразовать эти данные при сериализации для отображения только последних четырех цифр.

У меня есть полный номер социального страхования: 123-45-6789.Я хочу, чтобы мой вывод сериализатора содержал: ***-**-6789

Моя модель:

class Employee (models.Model):

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

Мой сериализатор:

class EmployeeSerializer(serializers.ModelSerializer):

    id = serializers.ReadOnlyField()

    class Meta:
        model = Employee

        fields = ('id','ssn')

        read_only_fields = ['id']

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Если вам не нужно обновлять ssn, просто затените поле с помощью SerializerMethodField и определите get_ssn(self, obj) на сериализаторе.

В противном случае самый простой способвозможно просто переопределить .to_representation():

def to_representation(self, obj):
    data = super(EmployeeSerializer, self).to_representation(obj)
    data['ssn'] = self.mask_ssn(data['ssn'])
    return data

Пожалуйста, добавьте специальную обработку ('ssn' in data) при необходимости.

0 голосов
/ 19 мая 2018

Вы можете использовать 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...