Ответ
В Django REST Framework для создания или обновления экземпляра модели из данных сериализатора используется метод .save().
Этот метод можно вызывать только после успешной валидации данных с помощью serializer.is_valid().
Как работает .save():
В зависимости от того, как был инициализирован сериализатор, .save() вызывает один из двух методов:
.create(validated_data)— если сериализатор был создан только сdata(создание нового объекта)..update(instance, validated_data)— если сериализатор был создан сinstanceиdata(обновление существующего объекта).
Пример создания (Create):
# request.data = {'name': 'New Product', 'price': 150.0}
serializer = ProductSerializer(data=request.data)
if serializer.is_valid():
# Вызывает ProductSerializer.create()
new_product = serializer.save()
# new_product - это созданный экземпляр модели Product
Пример обновления (Update):
product_instance = Product.objects.get(pk=1)
# request.data = {'price': 200.0}
serializer = ProductSerializer(instance=product_instance, data=request.data, partial=True)
if serializer.is_valid():
# Вызывает ProductSerializer.update()
updated_product = serializer.save()
# updated_product - это обновленный экземпляр
Метод .save() также может принимать дополнительные аргументы, которые будут переданы в .create() или .update(). Это полезно для установки полей, которые не приходят от клиента, например, owner:
serializer.save(owner=request.user)