This commit is contained in:
Λlisue 2012-08-23 04:30:41 -07:00
commit ededfd5581
2 changed files with 26 additions and 6 deletions

View File

@ -508,8 +508,23 @@ class ModelMixin(object):
""" """
Get a model instance for read/update/delete requests. Get a model instance for read/update/delete requests.
""" """
import warnings
warnings.warn(
"``get_instance(**kwargs)`` method is deprecated. "
"use ``get_object(queryset=None)`` instead.",
DeprecationWarning
)
return self.get_queryset().get(**kwargs) 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): def get_queryset(self):
""" """
Return the queryset for this view. Return the queryset for this view.
@ -530,10 +545,9 @@ class ReadModelMixin(ModelMixin):
""" """
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
model = self.resource.model model = self.resource.model
query_kwargs = self.get_query_kwargs(request, *args, **kwargs)
try: try:
self.model_instance = self.get_instance(**query_kwargs) self.model_instance = self.get_object()
except model.DoesNotExist: except model.DoesNotExist:
raise ErrorResponse(status.HTTP_404_NOT_FOUND) raise ErrorResponse(status.HTTP_404_NOT_FOUND)
@ -586,12 +600,11 @@ class UpdateModelMixin(ModelMixin):
""" """
def put(self, request, *args, **kwargs): def put(self, request, *args, **kwargs):
model = self.resource.model 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 # 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 # correctly at the moment - will end up with a new url
try: try:
self.model_instance = self.get_instance(**query_kwargs) self.model_instance = self.get_object()
for (key, val) in self.CONTENT.items(): for (key, val) in self.CONTENT.items():
setattr(self.model_instance, key, val) setattr(self.model_instance, key, val)
@ -607,10 +620,9 @@ class DeleteModelMixin(ModelMixin):
""" """
def delete(self, request, *args, **kwargs): def delete(self, request, *args, **kwargs):
model = self.resource.model model = self.resource.model
query_kwargs = self.get_query_kwargs(request, *args, **kwargs)
try: try:
instance = self.get_instance(**query_kwargs) instance = self.get_object()
except model.DoesNotExist: except model.DoesNotExist:
raise ErrorResponse(status.HTTP_404_NOT_FOUND, None, {}) raise ErrorResponse(status.HTTP_404_NOT_FOUND, None, {})

View File

@ -29,6 +29,10 @@ class TestModelRead(TestModelsTestCase):
request = self.req.get('/groups') request = self.req.get('/groups')
mixin = ReadModelMixin() mixin = ReadModelMixin()
mixin.resource = GroupResource mixin.resource = GroupResource
# simulate View.dispatch
mixin.request = request
mixin.args = []
mixin.kwargs = {'id': group.id}
response = mixin.get(request, id=group.id) response = mixin.get(request, id=group.id)
self.assertEquals(group.name, response.name) self.assertEquals(group.name, response.name)
@ -40,6 +44,10 @@ class TestModelRead(TestModelsTestCase):
request = self.req.get('/groups') request = self.req.get('/groups')
mixin = ReadModelMixin() mixin = ReadModelMixin()
mixin.resource = GroupResource mixin.resource = GroupResource
# simulate View.dispatch
mixin.request = request
mixin.args = []
mixin.kwargs = {'id': 12345}
self.assertRaises(ErrorResponse, mixin.get, request, id=12345) self.assertRaises(ErrorResponse, mixin.get, request, id=12345)