修改序列化Django Rest Fram上的值

2024-09-28 20:18:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含敏感数据的模型,比如说一个社会保险号,我想把这个数据转换成只显示最后四位数字。在

我已经存储了完整的社会保险号码: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)

我的序列化程序:

^{pr2}$

Tags: 数据模型程序true序列化models数字null
2条回答

您可以使用^{}

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]

如果不需要更新ssn,只需使用^{}隐藏字段并在序列化程序上定义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)。在

相关问题 更多 >