Я довольно новичок в сериализаторах Django и все еще не понимаю, как они работают.
У меня довольно общий сценарий, в котором я вызываю свой API, который просто устанавливает поле в моём объекте модели и сохраняет его (предположим, что запись уже существует, и она только обновляется). Однако мне нужно проверить этот объект модели перед его сохранением.
api.py
@detail_route(methods=['POST'], url_path='submit-draft')
def submit_draft(self, request, *args, **kwargs):
booking = self.get_object()
# serializer with custom validations.
serializer = self.get_serializer(booking)
serializer.is_valid(raise_exception=True)
booking.submit_draft(by=request.user)
booking.save()
data = serializers.BookingDetailSerializer(booking, context={'request': request}).data
return response.Ok(data)
serializers.py
class BookingCreateUpdateSerializer(serializers.ModelSerializer):
date = serializers.CharField()
duration = serializers.IntegerField(required=True, )
created_by = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault(), )
modified_by = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault(), )
....
class Meta:
model = models.Booking
fields = [
'title',
'date',
'duration',
'client',
'created_by',
'modified_by',
....
]
Однако я получаю эту ошибку:
AssertionError: Cannot call '.is_valid()' as no 'data=' keyword argument was passed when instantiating the serializer instance.
Я понимаю, что сериализатор ожидает словарь, а не реальный модальный объект. Но я не могу понять, как достичь того, чего я хочу, т.е. проверить модель объекта. Кто-нибудь может предложить, пожалуйста, правильный подход?