首页 > 解决方案 > 创建多个对象时,DRF 模型序列化程序是否保留列表中的顺序?

问题描述

我想用来ModelSerializer创建多个对象。

如果我有一个对象的数据列表,

data = [{object_1_data},{object_2_data},...]

当我使用模型序列化程序创建对象时,

serializer = serializer(data=data, many=true)
if serializer.is_valid():
    objects = serializer.save()

返回objects列表是否包含与之前相同顺序的对象?

objects = [object_1, object_2, ...]

标签: pythondjangodjango-rest-framework

解决方案


是的。

示例(如果需要 on):序列化程序必须保持对象顺序,以便 DRF 保持其视图集中结果的顺序。顺序取自原始查询集/列表顺序。取list()DRF ListModelMixin的方法:

class ListModelMixin:
    """
    List a queryset.
    """
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

(排序是在查询集中完成的,而不是在序列化器的结果数据上)


推荐阅读