aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/generics.py
diff options
context:
space:
mode:
authorAndrew Hankinson2012-12-16 14:49:18 -0500
committerAndrew Hankinson2012-12-16 14:49:18 -0500
commit18338a37d356faebb0f59bd57b2ba876d66e6b73 (patch)
treeedb7894e715723c1b29ba8042be0c3d6a687b312 /rest_framework/generics.py
parent4f96951be9800cfc1fc67795a26d11ac66abc60d (diff)
downloaddjango-rest-framework-18338a37d356faebb0f59bd57b2ba876d66e6b73.tar.bz2
Adding PATCH support to Django REST Framework
Diffstat (limited to 'rest_framework/generics.py')
-rw-r--r--rest_framework/generics.py40
1 files changed, 36 insertions, 4 deletions
diff --git a/rest_framework/generics.py b/rest_framework/generics.py
index dd8dfcf8..11701f98 100644
--- a/rest_framework/generics.py
+++ b/rest_framework/generics.py
@@ -47,14 +47,14 @@ class GenericAPIView(views.APIView):
return serializer_class
- def get_serializer(self, instance=None, data=None, files=None):
+ def get_serializer(self, instance=None, data=None, files=None, partial=False):
"""
Return the serializer instance that should be used for validating and
deserializing input, and for serializing output.
"""
serializer_class = self.get_serializer_class()
context = self.get_serializer_context()
- return serializer_class(instance, data=data, files=files, context=context)
+ return serializer_class(instance, data=data, files=files, partial=partial, context=context)
class MultipleObjectAPIView(MultipleObjectMixin, GenericAPIView):
@@ -169,7 +169,17 @@ class UpdateAPIView(mixins.UpdateModelMixin,
Concrete view for updating a model instance.
"""
def put(self, request, *args, **kwargs):
- return self.update(request, *args, **kwargs)
+ return self.update(request, partial=False, *args, **kwargs)
+
+
+class ParitalUpdateAPIView(mixins.UpdateModelMixin,
+ SingleObjectAPIView):
+
+ """
+ Concrete view for paritally updating a model instance.
+ """
+ def patch(self, request, *args, **kwargs):
+ return self.update(request, partial=True, *args, **kwargs)
class ListCreateAPIView(mixins.ListModelMixin,
@@ -209,7 +219,29 @@ class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
- return self.update(request, *args, **kwargs)
+ return self.update(request, partial=False, *args, **kwargs)
+
+ def delete(self, request, *args, **kwargs):
+ return self.destroy(request, *args, **kwargs)
+
+
+class RetrievePartialUpdateDestroyAPIView(mixins.RetrieveModelMixin,
+ mixins.UpdateModelMixin,
+ mixins.DestroyModelMixin,
+ SingleObjectAPIView):
+
+ """
+ Concrete view for retrieving, updating via PATCH (partial) or PUT (full),
+ or deleting a model instance.
+ """
+ def get(self, request, *args, **kwargs):
+ return self.retrieve(request, *args, **kwargs)
+
+ def put(self, request, *args, **kwargs):
+ return self.update(request, partial=False, *args, **kwargs)
+
+ def patch(self, request, *args, **kwargs):
+ return self.update(request, partial=True, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)