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