Python Django模型序列化程序
我正在学习如何使用Django Rest框架,我提出了一个我无法回答的问题 我理解嵌套序列化程序的概念,但我认为应该有一种方法在“上层”中获取特定字段,而不是在“底层”中“挖掘”。让我更好地解释我的意思 我有Python Django模型序列化程序,python,json,django,Python,Json,Django,我正在学习如何使用Django Rest框架,我提出了一个我无法回答的问题 我理解嵌套序列化程序的概念,但我认为应该有一种方法在“上层”中获取特定字段,而不是在“底层”中“挖掘”。让我更好地解释我的意思 我有用户,然后将其分为两类客户(默认用户类别)和驱动程序。所有用户都有一个带有图片的配置文件,因此我想在API中获得名称和图像。我一直设法找到的唯一解决方案是 类OrderProfileSerializer(serializers.ModelSerializer): 类元: 模型=外形 字段=(
用户
,然后将其分为两类客户
(默认用户
类别)和驱动程序
。所有用户
都有一个带有图片的配置文件
,因此我想在API中获得名称
和图像
。我一直设法找到的唯一解决方案是
类OrderProfileSerializer(serializers.ModelSerializer):
类元:
模型=外形
字段=(“id”、“图像”)
类OrderUserSerializer(serializers.ModelSerializer):
profile=OrderProfileSerializer()
类元:
模型=用户
字段=(“id”、“配置文件”)
类OrderCustomerSerializer(serializers.ModelSerializer):
name=serializers.ReadOnlyField(source=“get\u full\u name”)
profile=OrderProfileSerializer()
类元:
模型=用户
字段=(“id”、“名称”、“配置文件”)
类OrderDriverSerializer(serializers.ModelSerializer):
name=serializers.ReadOnlyField(source=“user.get\u full\u name”)
user=OrderUserSerializer()
类元:
型号=驱动器
字段=(“id”、“名称”、“用户”)
这是JSON响应
{
“航运”:{
“id”:25,
“客户”:{
“id”:14,
“名称”:“测试客户”,
“简介”:{
“id”:10,
“图像”:“/media/profile\u pics/default.jpg”
}
},
“司机”:{
“id”:1,
“名称”:“测试驱动程序”,
“用户”:{
“id”:28,
“简介”:{
“id”:11,
“图像”:“/media/profile\u pics/default.jpg”
}
}
}
}
}
无论如何,我都能做到,但我相信,为了学习,我应该总是追求一个更“优雅”的解决方案,而不是“保持最简单的解决方案”。因此,我想作出以下回应:
{
“航运”:{
“id”:25,
“客户”:{
“id”:14,
“名称”:“测试客户”,
“图像”:“/media/profile\u pics/default.jpg”
},
“司机”:{
“id”:1,
“名称”:“测试驱动程序”,
“图像”:“/media/profile\u pics/default.jpg”
}
}
}
感谢您提供的任何提示/帮助/建议,您可以提供而不是使用:
profile = OrderProfileSerializer()
重新致函:
image = serializers.SerializerMethodField()
def get_image(self, obj):
# obj is the customer object
# return what u need (like this example) or write a model inner method
return obj.profile.image
这将很好地与您想要的json对齐
对驱动程序和用户执行相同的操作,而不是使用:
profile = OrderProfileSerializer()
重新致函:
image = serializers.SerializerMethodField()
def get_image(self, obj):
# obj is the customer object
# return what u need (like this example) or write a model inner method
return obj.profile.image
这将很好地与您想要的json对齐
对驱动程序和用户执行相同的操作