diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 55cfafda4..4dd42a2fc 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -289,3 +289,32 @@ class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin, def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs) + +class RetrieveListCreateUpdateDestroyAPIView(mixins.RetrieveModelMixin, + mixins.ListModelMixin, + mixins.CreateModelMixin, + mixins.UpdateModelMixin, + mixins.DestroyModelMixin, + GenericAPIView): + """ + Concrete view for listing a queryset or retrieving, creating, updating or deleting a model instance, + """ + def get(self, request, *args, **kwargs): + if kwargs.get(self.lookup_field): + return self.retrieve(request, *args, **kwargs) + else: + return self.list(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + return self.create(request, *args, **kwargs) + + def put(self, request, *args, **kwargs): + return self.update(request, *args, **kwargs) + + def patch(self, request, *args, **kwargs): + return self.partial_update(request, *args, **kwargs) + + def delete(self, request, *args, **kwargs): + return self.destroy(request, *args, **kwargs) + +` \ No newline at end of file