aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/generics.py
diff options
context:
space:
mode:
authorTom Christie2012-11-07 21:07:24 +0000
committerTom Christie2012-11-07 21:07:24 +0000
commit47b534a13e42d498629bf9522225633122c563d5 (patch)
treefc7acddb14038fc5f159c1399dac7974a76caf4b /rest_framework/generics.py
parent9fd061a0b68f0cef6683bf195911a2cc7ff2fa06 (diff)
downloaddjango-rest-framework-47b534a13e42d498629bf9522225633122c563d5.tar.bz2
Make filtering optional, and pluggable.
Diffstat (limited to 'rest_framework/generics.py')
-rw-r--r--rest_framework/generics.py33
1 files changed, 6 insertions, 27 deletions
diff --git a/rest_framework/generics.py b/rest_framework/generics.py
index ac02d3da..ebd06e45 100644
--- a/rest_framework/generics.py
+++ b/rest_framework/generics.py
@@ -6,7 +6,7 @@ from rest_framework import views, mixins
from rest_framework.settings import api_settings
from django.views.generic.detail import SingleObjectMixin
from django.views.generic.list import MultipleObjectMixin
-import django_filters
+
### Base classes for the generic views ###
@@ -58,34 +58,13 @@ class MultipleObjectAPIView(MultipleObjectMixin, GenericAPIView):
pagination_serializer_class = api_settings.DEFAULT_PAGINATION_SERIALIZER_CLASS
paginate_by = api_settings.PAGINATE_BY
- filter_class = None
- filter_fields = None
-
- def get_filter_class(self):
- """
- Return the django-filters `FilterSet` used to filter the queryset.
- """
- if self.filter_class:
- return self.filter_class
-
- if self.filter_fields:
- class AutoFilterSet(django_filters.FilterSet):
- class Meta:
- model = self.model
- fields = self.filter_fields
- return AutoFilterSet
-
- return None
+ filter_backend = api_settings.FILTER_BACKEND
def filter_queryset(self, queryset):
- filter_class = self.get_filter_class()
-
- if filter_class:
- assert issubclass(filter_class.Meta.model, self.model), \
- "%s is not a subclass of %s" % (filter_class.Meta.model, self.model)
- return filter_class(self.request.GET, queryset=queryset)
-
- return queryset
+ if not self.filter_backend:
+ return queryset
+ backend = self.filter_backend()
+ return backend.filter_queryset(self.request, queryset, self)
def get_filtered_queryset(self):
return self.filter_queryset(self.get_queryset())