Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用ModelSerializer以简洁的方式从模型字段获取转换后的数据?_Python_Django_Django Rest Framework - Fatal编程技术网

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方式