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  | 
