Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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_Serialization_Django Rest Framework - Fatal编程技术网

Python 重命名DRF序列化程序字段

Python 重命名DRF序列化程序字段,python,serialization,django-rest-framework,Python,Serialization,Django Rest Framework,我使用DRF序列化程序来验证从JSON API检索的传入数据。我试图从响应中重命名一些命名笨拙的字段,以便在代码中更进一步地使用序列化程序.data 从API接收的数据如下所示: {“FunnyNamedField”:true,“AnotherWeirdField”:false} 和处理代码: resp = requests.get([...]) resp.raise_for_status() ser = MyFunnyDataSerializer(data=resp.json()) if se

我使用DRF序列化程序来验证从JSON API检索的传入数据。我试图从响应中重命名一些命名笨拙的字段,以便在代码中更进一步地使用
序列化程序.data

从API接收的数据如下所示:

{“FunnyNamedField”:true,“AnotherWeirdField”:false}

和处理代码:

resp = requests.get([...])
resp.raise_for_status()
ser = MyFunnyDataSerializer(data=resp.json())
if ser.is_valid():
    do_domething_with(ser.data)
我希望序列化程序能够将传入的字段名转换为更合适的名称<代码>序列数据可能看起来像:
{'fully':True,'wird':False}

我尝试过但没有如我所希望的那样成功:

class MyFunnyDataSerializer(serializers.Serializer):
    funny = serializers.Booleanfield(source='FunnyNamedField')

是否有任何方法可以在不返回到SerializerMethodField的情况下实现此目的?

您可以覆盖BaseSerializer以实现此目的:

from rest_framework import serializers

class CustomSerializer(serializers.BaseSerializer):

    def to_representation(self, instance):
        return {
            <datas>
        }

希望有帮助。

尝试此链接此链接建议使用source=,它仅适用于ModelSerializer。是的,谢谢!我稍微编辑了您的答案,第二种解决方案只允许更改序列化程序中的数据,而不允许更改字段名,因此我删除了t(不适用于该问题)。
from rest_framework import serializers

class BlogPostSerializer(serializers.Serializer):
    title = serializers.CharField(max_length=100)
    content = serializers.CharField()

    def validate_title(self, value):
        """
        Check that the blog post is about Django.
        """
        if 'django' not in value.lower():
            raise serializers.ValidationError("Blog post is not about Django")
        if value == "something":
            value = "something_else"
        return value