Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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 DRF序列化程序字段重命名为它';验证数据中的源_Python_Django_Django Rest Framework - Fatal编程技术网

Python DRF序列化程序字段重命名为它';验证数据中的源

Python DRF序列化程序字段重命名为它';验证数据中的源,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个drf序列化程序,其中有一个要重命名的字段: class UserBulkUploadSerializer(serializers.Serializer): ... is_admin=serializers.BooleanField(必需=False,source='administrator') 但是,在validated\u数据属性中,它被重命名回源属性值。我正在这样做: serializer=UserBulkUploadSerializer(data=data) 序列化程序。_是

我有一个drf序列化程序,其中有一个要重命名的字段:

class UserBulkUploadSerializer(serializers.Serializer):
...
is_admin=serializers.BooleanField(必需=False,source='administrator')
但是,在
validated\u数据
属性中,它被重命名回
属性值。我正在这样做:

serializer=UserBulkUploadSerializer(data=data)
序列化程序。_是否有效()
返回serializer.validated\u数据
这里没有
是\u admin
键,它是
管理员


有没有办法克服这一问题,使其成为
验证数据中的
管理

我想您需要添加两个字段,一个是只读字段,一个是写字段。 像这样:

class UserBulkUploadSerializer(serializers.Serializer):
    ...
    administrator = serializers.BooleanField(required=False)
    is_admin = serializers.BooleanField(read_only=True, source='administrator')

    extra_kwargs = {
        'administrator': {'write_only': True},
    }

我还不能测试这一个,所以我不确定两个具有相同源的字段是否会导致错误,否则您可以将is_admin更改为SerializerMethodField。

我已经深入研究了DRF源,似乎没有干净的解决方案。
validated\u数据
attribute只是不用于处理此问题。

数据
属性的输出将带有重命名的键。

是的,我已经做了一些类似这样的黑客操作,只是通过编程方式替换了键,但我想知道我是否缺少了一些关于序列化器字段的内容,以及是否可以以某种干净的方式修复它。在我的问题示例中,我在传入的数据中有
administrator
字段:
serializer=UserBulkUploadSerializer(data=data)
我希望它在序列化程序输出中被翻译成
is\u admin
。因此,提供
source
属性感觉是实现这一点的一种合乎逻辑的方式,但它并没有像我期望的那样工作_(ツ)_/“等等,我现在很困惑。该字段在传入数据上称为administrator,在您的模型上称为administrator,但您希望它在传出数据上称为is_admin?还是在您的模型上也称为is_admin?在模型上称为
administrator
,在传出数据上称为
is_admin