Python Django模型序列化程序

Python Django模型序列化程序,python,json,django,Python,Json,Django,我正在学习如何使用Django Rest框架,我提出了一个我无法回答的问题 我理解嵌套序列化程序的概念,但我认为应该有一种方法在“上层”中获取特定字段,而不是在“底层”中“挖掘”。让我更好地解释我的意思 我有用户,然后将其分为两类客户(默认用户类别)和驱动程序。所有用户都有一个带有图片的配置文件,因此我想在API中获得名称和图像。我一直设法找到的唯一解决方案是 类OrderProfileSerializer(serializers.ModelSerializer): 类元: 模型=外形 字段=(

我正在学习如何使用Django Rest框架,我提出了一个我无法回答的问题

我理解嵌套序列化程序的概念,但我认为应该有一种方法在“上层”中获取特定字段,而不是在“底层”中“挖掘”。让我更好地解释我的意思

我有
用户
,然后将其分为两类
客户
(默认
用户
类别)和
驱动程序
。所有
用户
都有一个带有图片的
配置文件
,因此我想在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对齐

对驱动程序和用户执行相同的操作