diff --git a/djangorestframework/mixins.py b/djangorestframework/mixins.py index 6c8f8179d..2780d171a 100644 --- a/djangorestframework/mixins.py +++ b/djangorestframework/mixins.py @@ -507,8 +507,23 @@ class ModelMixin(object): """ Get a model instance for read/update/delete requests. """ + import warnings + warnings.warn( + "``get_instance(**kwargs)`` method is deprecated. " + "use ``get_object(queryset=None)`` insted.", + DeprecationWarning + ) return self.get_queryset().get(**kwargs) + def get_object(self, queryset=None): + """ + Get a model instance for read/update/delete requests. + """ + queryset = queryset or self.get_queryset() + queryset_kwargs = self.get_query_kwargs(*self.args, **self.kwargs) + return queryset.get(**queryset_kwargs) + + def get_queryset(self): """ Return the queryset for this view. @@ -529,10 +544,9 @@ class ReadModelMixin(ModelMixin): """ def get(self, request, *args, **kwargs): model = self.resource.model - query_kwargs = self.get_query_kwargs(request, *args, **kwargs) try: - self.model_instance = self.get_instance(**query_kwargs) + self.model_instance = self.get_object() except model.DoesNotExist: raise ErrorResponse(status.HTTP_404_NOT_FOUND) @@ -585,12 +599,11 @@ class UpdateModelMixin(ModelMixin): """ def put(self, request, *args, **kwargs): model = self.resource.model - query_kwargs = self.get_query_kwargs(request, *args, **kwargs) # TODO: update on the url of a non-existing resource url doesn't work # correctly at the moment - will end up with a new url try: - self.model_instance = self.get_instance(**query_kwargs) + self.model_instance = self.get_object() for (key, val) in self.CONTENT.items(): setattr(self.model_instance, key, val) @@ -606,10 +619,9 @@ class DeleteModelMixin(ModelMixin): """ def delete(self, request, *args, **kwargs): model = self.resource.model - query_kwargs = self.get_query_kwargs(request, *args, **kwargs) try: - instance = self.get_instance(**query_kwargs) + instance = self.get_object() except model.DoesNotExist: raise ErrorResponse(status.HTTP_404_NOT_FOUND, None, {}) diff --git a/djangorestframework/tests/mixins.py b/djangorestframework/tests/mixins.py index 8268fdca7..8340580bb 100644 --- a/djangorestframework/tests/mixins.py +++ b/djangorestframework/tests/mixins.py @@ -29,6 +29,10 @@ class TestModelRead(TestModelsTestCase): request = self.req.get('/groups') mixin = ReadModelMixin() mixin.resource = GroupResource + # simulate View.dispatch + mixin.request = request + mixin.args = [] + mixin.kwargs = {'id': group.id} response = mixin.get(request, id=group.id) self.assertEquals(group.name, response.name) @@ -40,6 +44,10 @@ class TestModelRead(TestModelsTestCase): request = self.req.get('/groups') mixin = ReadModelMixin() mixin.resource = GroupResource + # simulate View.dispatch + mixin.request = request + mixin.args = [] + mixin.kwargs = {'id': 12345} self.assertRaises(ErrorResponse, mixin.get, request, id=12345)