【问题标题】:Django REST Framework - Custom JSONDjango REST 框架 - 自定义 JSON
【发布时间】:2014-10-24 10:36:42
【问题描述】:

如何将列表序列化为 JSON 对象?该列表结合了 2 个不同的模型,如下所示:

[<Room: 303 at 123 Toronto Street>, 
<Room: 305 at 123 Toronto Street>, 
<Room: 304 at 123 Toronto Street>, 
<SubvisitClinician: kchung>, 
<SubvisitClinician: pche>, 
<SubvisitClinician: mlo>]

我已经创建了 RoomSerializer 和 SubvisitClinicianSerializer,但不确定如何完成和实现它。

class RoomSerializer(serializers.ModelSerializer):
    id = serializers.Field()  # Note: `Field` is an untyped read-only field.
    name = serializers.CharField(max_length=255)
    type = serializers.Field(source='type')
    clinic_location = serializers.Field(source='clinic_location')
    status = serializers.Field(source='status')
    url = serializers.CharField(max_length=100, default="room")

    class Meta:
        model = Room

class SubvisitClinicianSerializer(serializers.ModelSerializer):
    id = serializers.Field()
    subvisit = serializers.Field('subvisit')
    user = serializers.Field('user')
    primary = serializers.BooleanField()

    class Meta:
        model = SubvisitClinician

【问题讨论】:

    标签: python json django django-rest-framework


    【解决方案1】:

    我很快就写完了。

    简单示例:

    data1 = RoomSerializer(self.get_queryset(), many=True).data
    data2 = SubvisitClinicianSerializer(self.get_queryset(), many=True).data
    data_list = data1 + data2
    

    【讨论】:

      【解决方案2】:

      您可以编写函数来迭代列表并根据类型调用所需的序列化程序:

      def serialize_list(data):
          return [RoomSerializer(i) if isinstance(i, Room) else SubvisitClinicianSerializer(i) for i in data]
      

      【讨论】:

        【解决方案3】:

        感谢亚历克斯的回复。在做了更多研究后设法回答了我自己的问题。重申了如何创建列表并将其转换为对象。创建了一个带有房间和 subvisit_clinicians 的 RoomList 类,然后创建了一个 RoomListSerializer。代码如下。

        class RoomList(object):
            def __init__(self):
                super(RoomList, self).__init__()
                self.rooms = []
                self.subvisit_clinicians = []
        
            def add_room(self, room):
                self.rooms.append(room)
        
            def add_subvisit_clinician(self, subvisit_clinician):
                self.subvisit_clinicians.append(subvisit_clinician)
        
        class RoomListSerializer(serializers.Serializer):
            rooms = RoomSerializer(many=True)
            subvisit_clinicians = SubvisitClinicianSerializer(many=True)
        

        【讨论】:

          猜你喜欢
          • 2021-01-30
          • 2016-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-03
          • 2021-05-30
          相关资源
          最近更新 更多