2015-09-09 2 views
0

Я разрабатываю веб-приложение поверх Django, и я использую Django Rest Framework для моего API. Существует класс модели с именем Events и мой EventSerializer в DRF - довольно распространенный сериализатор без какой-либо специальной конфигурации. Он просто сбрасывает данные, возвращаемые EventManager.sort Django Rest Framework JSON output по данным

В классе модели событий есть поле «Тип». Мой вернулся JSON сейчас:

{ 
    events: [ 
     {object1}, 
     {object2}, 
     ..... 
    ] 
} 

, как и все сбрасывали в ФПИ апи и возвращенного Джанго.

По какой-то причине мне нужны объекты объектов, возвращаемых категорией в поле «тип». Например, мне нужно, чтобы получить это:

{ 
    events: [ 
     type1: [{object1}, {object2},...], 
     type2: [{object3}, {object4}, ...], 
     ....... 
    ] 
} 

Я буквально искал что-нибудь связанное с этим, но не могли найти правильное решение. У вас есть что предложить?

Заранее спасибо

+0

Пожалуйста, пост код для сериализаторов, моделей и представлений. –

ответ

1

Вы можете использовать SerializerMethodField и обеспечиваете пользовательские сериализации логика там:

class EventSerializer(serializers.Serializer): 
    events = serializers.SerializerMethodField(source="get_events") 

    def get_events(self, events): 
     event_list = {} 
     return [event_list[e.type].add({e}) if event.type in event_list else event_list[event.type] = [] for event in events] 
+0

Предполагая, что я следую этому предложению, что является буквально хорошим, мне нужно создать отдельный сериализатор, учитывая, что все поля событий должны быть открыты. Но мне нужно избегать дополнительных вызовов API, к тому времени, когда уже существует сериализатор событий. –

+0

Я его не понял. Можете ли вы уточнить? –

+0

@koslib Чтобы уменьшить вызов базы данных, используйте '.filter, select_related и prefetch_related' в наборе запросов. –

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