aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/mixins.py
diff options
context:
space:
mode:
authorTom Christie2012-01-21 18:24:10 +0000
committerTom Christie2012-01-21 18:24:10 +0000
commita851294d052174b53531fdf90b22ddac8738e374 (patch)
tree3248e98bb2b6442e31be8bce1fb2f4227473dd8f /djangorestframework/mixins.py
parentadd6c88a265858a6c9943e5cc73b22e2866c98b9 (diff)
downloaddjango-rest-framework-a851294d052174b53531fdf90b22ddac8738e374.tar.bz2
get_ordering/get_queryset refactoring
Diffstat (limited to 'djangorestframework/mixins.py')
-rw-r--r--djangorestframework/mixins.py50
1 files changed, 22 insertions, 28 deletions
diff --git a/djangorestframework/mixins.py b/djangorestframework/mixins.py
index 66ab9071..72dfe29d 100644
--- a/djangorestframework/mixins.py
+++ b/djangorestframework/mixins.py
@@ -455,10 +455,9 @@ class ResourceMixin(object):
else:
return None
-
-
##########
+
class InstanceMixin(object):
"""
`Mixin` class that is used to identify a `View` class as being the canonical identifier
@@ -495,6 +494,8 @@ class ModelMixin(object):
handles the instance data creation/preaparation.
"""
+ queryset = None
+
def build_query(self, *args, **kwargs):
""" Returns django.db.models.Q object to be used for the objects retrival.
@@ -564,6 +565,19 @@ class ModelMixin(object):
model = self.resource.model
return model.objects.get(self.build_query(*args, **kwargs))
+ def get_queryset(self):
+ """
+ Return the queryset for this view.
+ """
+ return getattr(self.resource, 'queryset',
+ self.resource.model.objects.all())
+
+ def get_ordering(self):
+ """
+ Return the ordering for this view.
+ """
+ return getattr(self.resource, 'ordering', None)
+
class ReadModelMixin(ModelMixin):
"""
@@ -634,7 +648,8 @@ class UpdateModelMixin(ModelMixin):
def put(self, request, *args, **kwargs):
model = self.resource.model
- # 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
+ # 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_object(*args, **kwargs)
@@ -667,36 +682,15 @@ class ListModelMixin(ModelMixin):
Behavior to list a set of `model` instances on GET requests
"""
- # NB. Not obvious to me if it would be better to set this on the resource?
- #
- # Presumably it's more useful to have on the view, because that way you can
- # have multiple views across different querysets mapping to the same resource.
- #
- # Perhaps it ought to be:
- #
- # 1) View.queryset
- # 2) if None fall back to Resource.queryset
- # 3) if None fall back to Resource.model.objects.all()
- #
- # Any feedback welcomed.
- queryset = None
-
def get(self, request, *args, **kwargs):
queryset = self.get_queryset()
+ ordering = self.get_ordering()
- if hasattr(self, 'resource'):
- ordering = getattr(self.resource, 'ordering', None)
- else:
- ordering = None
-
+ queryset = queryset.filter(self.build_query(**kwargs))
if ordering:
- args = as_tuple(ordering)
- queryset = queryset.order_by(*args)
- return queryset.filter(self.build_query(**kwargs))
+ queryset = queryset.order_by(*ordering)
- def get_queryset(self):
- model = self.resource.model
- return model.objects.all() if self.queryset is None else self.queryset
+ return queryset
########## Pagination Mixins ##########