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
. Спасибо!