Python 如何在django rest框架中使用序列化程序将类似数据合并到自定义字段中?
我有一个api,它返回material_id、material_name和它的store_id(外键)和store_name,它还有一个搜索后端。因此,我想返回一个关键材料上的所有材料名称和材料id,同样地,返回关键材料存储中的所有存储字段 所以我尝试了下面的代码Python 如何在django rest框架中使用序列化程序将类似数据合并到自定义字段中?,python,django,django-models,django-rest-framework,django-serializer,Python,Django,Django Models,Django Rest Framework,Django Serializer,我有一个api,它返回material_id、material_name和它的store_id(外键)和store_name,它还有一个搜索后端。因此,我想返回一个关键材料上的所有材料名称和材料id,同样地,返回关键材料存储中的所有存储字段 所以我尝试了下面的代码 类材料建议(generics.ListAPIView): 搜索字段=[“名称”、“形状”、“颜色”、“材料类型”, “表面类型”、“存储名称”] 过滤器\后端=(filters.SearchFilter,) queryset=Mate
类材料建议(generics.ListAPIView):
搜索字段=[“名称”、“形状”、“颜色”、“材料类型”,
“表面类型”、“存储名称”]
过滤器\后端=(filters.SearchFilter,)
queryset=Material.objects.all()
serializer\u class=材料建议serializer
类MaterialSuggestionSerializer(serializers.ModelSerializer):
类元:
型号=材料
字段=('material','store')
material=serializers.SerializerMethodField('get\u material'))
store=serializers.SerializerMethodField('get\u store')
def get_材料(自身、obj):
返回{'material_id':obj.id,'material_name':obj.name}
def get_存储(自身、obj):
返回{'store\u id':obj.store.id,'store\u name':obj.store.name}
当我调用api时,我得到如下结果:
{
"material": {
"material_id": 14,
"material_name": "test"
},
"store": {
"store_id": 28,
"store_name": "test1"
}
},
{
"material": {
"material_id": 13,
"material_name": "test3"
},
"store": {
"store_id": 29,
"store_name": "test2"
}
}
]
这是我理想的回报
{
"material": [ {
"material_id": 14,
"material_name": "test"
},
{
"material_id": 13,
"material_name": "test3"
}
]
"store": [ {
"store_id": 28,
"store_name": "test1"
},
{
"store_id": 29,
"store_name": "test2"
}
]
}
或者这也太好了
{
"material": {
"material_id": 14,13
"material_name": "test","test3"
},
"store": {
"store_id": 28,29
"store_name": "test1","test2"
},
}
我们如何使用序列化程序处理返回的数据,以及如何访问进入序列化程序的查询集?您所需的输出不再是真正的模型序列化程序,例如,您完全失去了材质和存储之间的关系
您应该考虑建立自己的字典,然后将其转换为自定义JSON,并将其作为响应传递,如这里所解释的: