From f668db7514081b39c8f0bc08ec3acd6a4e3bd57f Mon Sep 17 00:00:00 2001 From: Tomasz Dubiel Date: Thu, 16 Feb 2017 22:49:48 -0600 Subject: [PATCH] Move request.data to getter method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change allow to manipulate data with request, in case data being nested, required modification (a good example could be when instead delete file we want to change `active` field to false instead - performing update of { ‘active’ : False } ) --- rest_framework/mixins.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index f3695e665..55c76ee53 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -15,8 +15,11 @@ class CreateModelMixin(object): """ Create a model instance. """ + def get_request_data(self, request, *args, **kwargs): + return request.data + def create(self, request, *args, **kwargs): - serializer = self.get_serializer(data=request.data) + serializer = self.get_serializer(data=self.get_request_data(request)) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) @@ -62,10 +65,13 @@ class UpdateModelMixin(object): """ Update a model instance. """ + def get_request_data(self, request, *args, **kwargs): + return request.data + def update(self, request, *args, **kwargs): partial = kwargs.pop('partial', False) instance = self.get_object() - serializer = self.get_serializer(instance, data=request.data, partial=partial) + serializer = self.get_serializer(instance, data=self.get_request_data(request), partial=partial) serializer.is_valid(raise_exception=True) self.perform_update(serializer)