From 25ab99a88268877a40e9762c8b89453c6ec95072 Mon Sep 17 00:00:00 2001 From: Kingston Date: Wed, 24 Jun 2015 19:52:58 -0700 Subject: [PATCH] Allow perform_create and perform_update to return differemt HTTP header --- rest_framework/mixins.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index c34cfcee1..c04fdcf63 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -17,9 +17,20 @@ class CreateModelMixin(object): def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) - self.perform_create(serializer) - headers = self.get_success_headers(serializer.data) - return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + status_code = self.perform_create(serializer) + if status_code is None: + headers = self.get_success_headers(serializer.data) + return Response( + serializer.data, + status=status.HTTP_201_CREATED, + headers=headers + ) + else: + return Response( + serializer.data, + status=status_code, + headers=headers + ) def perform_create(self, serializer): serializer.save() @@ -66,8 +77,11 @@ class UpdateModelMixin(object): instance = self.get_object() serializer = self.get_serializer(instance, data=request.data, partial=partial) serializer.is_valid(raise_exception=True) - self.perform_update(serializer) - return Response(serializer.data) + status_code = self.perform_update(serializer) + if status_code is None: + return Response(serializer.data) + else: + return Response(serializer.data, status=status_code) def perform_update(self, serializer): serializer.save()