From aa9e6c2de5da48f527a05aa148a12c9757733d48 Mon Sep 17 00:00:00 2001 From: Konstantinos Koukopoulos Date: Mon, 18 May 2015 18:42:21 +0300 Subject: [PATCH 1/2] provide get_success_headers on UpdateModelMixin This change provides a `get_success_headers` method on the UpdateModelMixin which can be used like the corresponding method on the CreateModelMixin. I thought this might be usefull because I was trying to add a header based on the result of the update operation, and this seems like a valid way. --- rest_framework/mixins.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index c34cfcee1..eddc2233f 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -67,7 +67,8 @@ class UpdateModelMixin(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) + headers = self.get_success_headers(serializer.data) + return Response(serializer.data, headers=headers) def perform_update(self, serializer): serializer.save() @@ -75,6 +76,12 @@ class UpdateModelMixin(object): def partial_update(self, request, *args, **kwargs): kwargs['partial'] = True return self.update(request, *args, **kwargs) + + def get_success_headers(self, data): + try: + return {'Content-Location': data[api_settings.URL_FIELD_NAME]} + except (TypeError, KeyError): + return {} class DestroyModelMixin(object): From bbe1447f552dd53d8702de7a397c4fe9b1078b24 Mon Sep 17 00:00:00 2001 From: Konstantinos Koukopoulos Date: Mon, 18 May 2015 18:46:56 +0300 Subject: [PATCH 2/2] Update mixins.py --- rest_framework/mixins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index eddc2233f..1afbe92dd 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -76,7 +76,7 @@ class UpdateModelMixin(object): def partial_update(self, request, *args, **kwargs): kwargs['partial'] = True return self.update(request, *args, **kwargs) - + def get_success_headers(self, data): try: return {'Content-Location': data[api_settings.URL_FIELD_NAME]}