2014-10-24 12 views
0

Как сериализовать список в объект JSON? Список объединить 2 различных моделей и выглядит следующим образом:Django REST Framework - Пользовательский JSON

[<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 

ответ

0

Спасибо за ответ Alex. Удалось ответить на мой собственный вопрос, сделав еще несколько исследований. Повторил, как был создан список и превратил его в объект. Создал класс RoomList с номерами и subvisit_clinicians, а затем создал 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) 
0

Вы можете написать функцию, которая будет итерации по списку и вызывать необходимый сериалайзер основе типа:

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

Спасибо Alex! Мне удалось заставить его работать, увидеть мой ответ. – zee

3

Я написал это быстро из памяти.

Простой пример:

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

Спасибо Эфрину! Мне удалось заставить его работать, увидеть мой ответ. – zee

+0

Добро пожаловать :) – Efrin

Смежные вопросы