Django Rest Framework - Сериализация нескольких объектов в одном объекте - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь интегрировать поддержку внешней библиотеки в мой проект.Для внешней библиотеки требуется точная структура данных, которую она использует для вызова response-a-a-table.

Простой сериализатор для моей модели может быть:

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ('id', 'title', 'author')

Итак, предположим, чтофрагмент, подобный следующему:

queryset = Book.objects.all()
serializer = BookSerializer(queryset, many=True)
serializer.data

Что дает такой вывод:

[
    {'id': 0, 'title': 'The electric kool-aid acid test', 'author': 'Tom Wolfe'},
    {'id': 1, 'title': 'If this is a man', 'author': 'Primo Levi'},
    {'id': 2, 'title': 'The wind-up bird chronicle', 'author': 'Haruki Murakami'}
]

Как мне изменить форму моего класса BookSerializer для достижения этого результата?Я не могу понять это.

{
    'id': [0, 1, 2],
    'title': ['The electric kool-aid acid test', 'If this is a man', 'The wind-up bird chronicle'],
    'author': ['Tom Wolfe', 'Primo Levi', 'Haruki Murakami']
}

1 Ответ

0 голосов
/ 11 октября 2018

Переопределите сериализатор to_representation, чтобы изменить формат вывода, как вам угодно.У DRF нет такой утилиты, но вы легко можете достичь этого с помощью панд.Например:

import pandas as pd

def to_representation(self, instance):
    data = super(BookSerializer, self).to_representation(instance)
    df = pd.DataFrame(data=data)
    reshaped_data = df.to_dict(orient='list')
    return reshaped_data

Обратите внимание, что теперь форма данных не будет работать, если вы хотите использовать этот сериализатор как часть представления.

...