Django Rest Framework-在单个对象中序列化多个对象

时间:2018-10-11 11:06:55

标签: django python-2.7 django-rest-framework serializer

我正在尝试在项目中集成对外部库的支持。外部库需要一个精确的数据结构,用于调用表即响应。

我的模型的一个简单序列化器可能是:

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 :(得分:0)

根据需要重写串行器的to_representation以重塑输出字典的形状。 DRF没有这样的实用程序,但是您可以使用pandas轻松实现。例如:

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

请注意,如果您想将此序列化器用作视图的一部分,那么数据的形状将不起作用。