#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 /…