主要用到的方法是:serializers.SerializerMethodField()
models.py
表 address company 分别外键关联了user表
需求:在user的序列化结果,把地址信息,公司信息,全都放在一个字段userinfo里显示出来
序列化后的数据结构:
{
"name":"zhangsan",
"age":18,
userinfo:{
addresses:[{地址对象内容},],
companies:[{公司对象内容},]
}
}
serializers.py
class UserInfoSeriazlier(serializers.ModelSerializer):
addresses = AddressSerializer()
companies = CompanySerializer()
class Meta:
model = User
fields = ('addresses', 'companies')
class User(serializers.ModelSerializer):
userinfo = serializers.SerializerMethodField()
def get_userinfo(self, obj):
"""
获取自定义的字段,get_<字段名称>
:param obj: obj为传入当前的user对象
:return: 返回的结果可以根据需要自定义,也可以是其他的序列化器类
"""
return UserInfoSeriazlier(obj, context={'request': None}).data
class Meta:
model = User
fields = ('name','userinfo')