首页 > 解决方案 > 如何在 django rest 序列化程序中创建嵌套的 json 格式?

问题描述

目前我在 API 响应中有这种格式

"inner_divertor": {
  "volume": 5.2,
  "volume_units": "m^2",
  "volume_notes": "xyz"
},
 "outer_divertor": {
  "volume": null,
  "volume_units": "m^3",
  "volume_notes": null
}

我正在尝试添加一个“卷”字段并将字段嵌套在其中。目标是有类似的东西:

"inner_divertor": {
  volume:{
    "volume": 4.3,
    "volume_units": "m^2",
    "volume_notes": "xyz" 
  }
},
"outer_divertor": {
  volume: {
    "volume": null,
    "volume_units": "m^3",
    "volume_notes": null
  }
}

以下是序列化程序:

class InnerDivertorSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = InnerDivertor
        fields = ('volume', 'volume_units', 'volume_notes')

class OuterDivertorSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = OuterDivertor
        fields = ('volume', 'volume_units', 'volume_notes')

标签: jsondjangoapirestserialization

解决方案


那么根据这个链接文档, https ://pypi.org/project/drf-flex-fields/

我认为您不应该将inner_divertor,outer_divertor分成两个单独的类,因为它们处于同一层次结构中。

而不是尝试这个:

class DivertorSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = Divertor
        fields = ('inner_divertor', 'outer_divertor')
        expandable_fields = {
            'inner_divertor': VolumnSerializer,
            'outer_divertor': VolumnSerializer
        }

class VolumnSerializer(FlexFieldsModelSerializer):
    class Meta:
        model = Volumn
        fields = ('volume', 'volume_units', 'volume_notes')

更重要的是你需要有 Volumn 和 Divertormodel


推荐阅读