Множественные экземпляры моделей 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.

Вернуться на верх