Python 如何使用ModelSerializer以简洁的方式从模型字段获取转换后的数据?
我有一个序列化程序类,如下所示:Python 如何使用ModelSerializer以简洁的方式从模型字段获取转换后的数据?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个序列化程序类,如下所示: class ReceiverInfoSerializer(ModelSerializer): create_at = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') change_at = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S') user_id =
class ReceiverInfoSerializer(ModelSerializer):
create_at = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
change_at = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')
user_id = serializers.IntegerField(required=False)
receiver_phone_num = serializers.SerializerMethodField()
def get_receiver_phone_num(self, instance):
secret_phone_num = get_encryption_phone_num(instance.receiver_phone_num) if instance.receiver_phone_num else None
return secret_phone_num
receiver\u phone\u num
也是一个模型字段。这些是存储在db表中的纯文本形式的电话号码。现在,我想用*
替换中间的4位数字来检索它。例如,从18812345678
转换为188****5678
。这就是get\u receiver\u phone\u num
所做的。但是,当我使用此序列化方法字段时,对receiver\u phone\u num的验证将变得无效,因为它是只读的
。
这样,我必须在中转换为_表示法
方法,如下所示:
def to_representation(self, instance):
res = super().to_representation(instance)
res['receiver_phone_num'] = get_encryption_phone_num(
instance.receiver_phone_num) if instance.receiver_phone_num else None
return res
我认为这并不方便,因为我必须推翻它。您是否有其他解决方法,请告诉我。没有,这很好,在这种情况下是DRF方式