Vikramark
Vikramark

Reputation: 307

Does DRF Model serializer preserve the order in the list when creating multiple objects?

I want to use ModelSerializer to create multiple objects.

If I have a list of the data for the objects as,

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

and when I use model serializer to create the objects as,

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

Does the return objects list contain the objects in the same order as earlier?

objects = [object_1, object_2, ...]

Upvotes: 3

Views: 750

Answers (1)

cakelover
cakelover

Reputation: 186

Yes.

Example (in case on is needed): Serializers must keep the object order, for DRF to keep ordering of results in their viewsets. Order is taken from the original queryset/list order. Take the list() method of the 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)

(Ordering is done in the queryset and not on the serializer's resulting data)

Upvotes: 3

Related Questions