diff options
| author | Ludwig Kraatz | 2012-11-13 18:00:41 +0100 |
|---|---|---|
| committer | Ludwig Kraatz | 2012-11-13 18:00:41 +0100 |
| commit | cc55a7b64310cdd4b8b96e8270a48fd994ede90c (patch) | |
| tree | 8208b4efaf9547a96382a14315df8d810f279cf0 /rest_framework/mixins.py | |
| parent | 44e9749e36d31f811db7dc0998c7b8d1e35a784d (diff) | |
| download | django-rest-framework-cc55a7b64310cdd4b8b96e8270a48fd994ede90c.tar.bz2 | |
Returning a Location Header on Create
when creating a Resource with HyperlinkedIdentityField of any name
Diffstat (limited to 'rest_framework/mixins.py')
| -rw-r--r-- | rest_framework/mixins.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index c3625a88..f54b5b1f 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -7,6 +7,7 @@ which allows mixin classes to be composed in interesting ways. from django.http import Http404 from rest_framework import status from rest_framework.response import Response +from rest_framework.fields import HyperlinkedIdentityField class CreateModelMixin(object): @@ -19,9 +20,23 @@ class CreateModelMixin(object): if serializer.is_valid(): self.pre_save(serializer.object) self.object = serializer.save() - return Response(serializer.data, status=status.HTTP_201_CREATED) + headers = self.get_success_headers(serializer) + return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - + + def get_success_headers(self,serializer): + headers = [] + identity_field = identity_name = None + for name,field in serializer.fields.iteritems(): + if isinstance(field,HyperlinkedIdentityField): + identity_name, identity_field = name, field + if identity_field: + #identity_field.initialize(serializer,"url") + headers.append( + ("Location",identity_field.field_to_native(self.object,identity_name)) + ) + return headers + def pre_save(self, obj): pass |
