Множественные экземпляры моделей django rest-framework
Я пытался найти способ создания нескольких объектов одним запросом API в django-rest-based API.
Я нашел много ответов на этот вопрос и пришел к переопределению метода ViewSet.get_serializer
следующим образом
def get_serializer(self, *args, **kwargs):
data = kwargs.get('data', None)
if data:
kwargs['many'] = isinstance(data, list)
return super().get_serializer(*args, **kwargs)
Я также переопределил serializer.to_representation
для того, чтобы добавить некоторые полезные данные в представление.
Проблема в том, что когда я создаю один объект на запрос, все идет нормально, но когда я пытаюсь создать несколько объектов, я получаю ошибки в методе serializer.to_representation
.
Я попытался отладить ошибку и похоже, что когда сериализатор инициализируется с помощью many=True
экземпляр, переданный в serializer.to_representation
, является OrderedDict, а не реальным экземпляром, поэтому я не могу получить доступ к свойствам экземпляра, таким как связанные поля и т.д.
def to_representation(self, instance):
if self.context['request'].method == 'POST':
print(type(representation), type(instance))
return super().to_representation(instance)
Вывод
<class 'collections.OrderedDict'> <class 'main.models.Expenditure'>
как и ожидалось для однообъектного запроса, но для многообъектных (которые все еще корректно создаются) запросов вывод более сложный.
<class 'collections.OrderedDict'> <class 'main.models.Expenditure'>
<class 'collections.OrderedDict'> <class 'main.models.Expenditure'>
<class 'collections.OrderedDict'> <class 'collections.OrderedDict'>
<class 'collections.OrderedDict'> <class 'collections.OrderedDict'>
В этом примере я попытался создать два объекта. Вызванный второй раунд to_representation
вызывает исключение в моем коде, когда я пытаюсь получить доступ к свойствам экземпляра, таким как связанные поля и т.д.
Я использую Python 3.9.13 и django-rest-framework 3.12.2.