Сохраняет ли сериализатор модели DRF порядок в списке при создании нескольких объектов?

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

Я хочу использовать 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, ...]
 

Ответ №1:

ДА.

Пример (на случай, если требуется 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)
 

(Упорядочение выполняется в наборе запросов, а не в результирующих данных сериализатора)

Комментарии:

1. Когда к сериализатору добавляется флаг (many=True), он становится дочерним элементом сериализатора списка. Который затем поддерживает порядок. Ссылка на реализацию сериализатора списка. github.com/encode/django-rest-framework/blob /…