From c267b7133183e8ed9fd6c23db4689b949512c2c9 Mon Sep 17 00:00:00 2001 From: Petros Moisiadis Date: Tue, 31 Mar 2015 20:05:23 +0300 Subject: [PATCH] Made it possible to explicitly bypass check for nested writes This allows for reusing create() and update() methods of ModelSerializer class when one wants to handle nested writes, but does not want to reimplement or copy the code that is already there in these methods. So, in a subclass of ModelSerializer, one can just call the parent's create() or update() method with check_for_nested_writes=False. --- rest_framework/serializers.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 2eef6eeb5..5609cfd9c 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -737,7 +737,7 @@ class ModelSerializer(Serializer): # Default `create` and `update` behavior... - def create(self, validated_data): + def create(self, validated_data, check_for_nested_writes=True): """ We have a bit of extra checking around this in order to provide descriptive messages when something goes wrong, but this method is @@ -758,7 +758,8 @@ class ModelSerializer(Serializer): If you want to support writable nested relationships you'll need to write an explicit `.create()` method. """ - raise_errors_on_nested_writes('create', self, validated_data) + if check_for_nested_writes: + raise_errors_on_nested_writes('create', self, validated_data) ModelClass = self.Meta.model @@ -797,8 +798,9 @@ class ModelSerializer(Serializer): return instance - def update(self, instance, validated_data): - raise_errors_on_nested_writes('update', self, validated_data) + def update(self, instance, validated_data, check_for_nested_writes=True): + if check_for_nested_writes: + raise_errors_on_nested_writes('update', self, validated_data) for attr, value in validated_data.items(): setattr(instance, attr, value)