Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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, ...]
like image 475
Vikramark Avatar asked Nov 20 '25 00:11

Vikramark


1 Answers

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)

like image 53
cakelover Avatar answered Nov 21 '25 13:11

cakelover



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!