ModelSerializer perform_create and perform_update

The ModelSerializer function should expose two simple methods intended to be overridden by users if they only want to customize the Model saving call when creating and updating the instance.
This commit is contained in:
Danilo Reinert 2021-05-14 19:55:37 -03:00 committed by GitHub
parent 3875d3284e
commit 83ed1f8fea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -936,7 +936,7 @@ class ModelSerializer(Serializer):
many_to_many[field_name] = validated_data.pop(field_name)
try:
instance = ModelClass._default_manager.create(**validated_data)
instance = perform_create(ModelClass, validated_data)
except TypeError:
tb = traceback.format_exc()
msg = (
@ -965,6 +965,9 @@ class ModelSerializer(Serializer):
return instance
def perform_create(ModelClass, validated_data):
return ModelClass._default_manager.create(**validated_data)
def update(self, instance, validated_data):
raise_errors_on_nested_writes('update', self, validated_data)
info = model_meta.get_field_info(instance)
@ -980,7 +983,7 @@ class ModelSerializer(Serializer):
else:
setattr(instance, attr, value)
instance.save()
perform_update(instance)
# Note that many-to-many fields are set after updating instance.
# Setting m2m fields triggers signals which could potentially change
@ -991,6 +994,9 @@ class ModelSerializer(Serializer):
return instance
def perform_update(instance):
instance.save()
# Determine the fields to apply...
def get_fields(self):