Django rest framework: как переопределить `is_valid` на сериализаторе, созданном с `many=True`?

Я попытался переопределить метод create в классе viewset, чтобы иметь возможность создавать несколько экземпляров моей модели одновременно. Метод create теперь имеет следующие строки:

    def create(self, request, *args, **kwargs):
        ...
        print('Debug 0')
        serializer = self.get_serializer(
            data=request.data,
            many=True
        )
        print('Debug 1')
        serializer.is_valid(raise_exception=True)
        print('Debug 2')
        self.perform_create(serializer)
        print('Debug 3')
        return Response(serializer.data)

Если я попытаюсь переопределить метод is_valid внутри класса сериализатора, я получу неожиданное поведение. Предположим, теперь я попытаюсь переопределить метод is_valid в классе сериализатора с помощью простой обертки:

    def is_valid(self, raise_exception=False):
        print('is_valid was called')
        return super(AlbumSerializer, self).is_valid(raise_exception)

Если нет ошибок валидации, то я ожидал бы, что сообщение "is_valid was called" появится после "Debug 1". Однако, к моему удивлению, оно появляется после "Debug 3", предполагая, что мой метод переопределения не вызывался до тех пор, пока элементы не были созданы!

Если есть ошибка валидации, то сообщение "is_valid was called" появляется после "Debug 1", как я и ожидал.

Так что я действительно удивлен/запутался, что здесь происходит, и хотел бы узнать, пожалуйста, есть ли особый способ, которым вы должны идти о переопределении is_valid, если сериализатор включает опцию many=True. Спасибо!

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