diff options
| author | toran billups | 2013-03-07 15:09:59 -0600 |
|---|---|---|
| committer | toran billups | 2013-03-08 10:08:53 -0600 |
| commit | 1a8f07def8094a1e34a656d83fc7bdba0efff184 (patch) | |
| tree | 2b6a3cf0f336b1723d6bd74e773b6ad56dca6cf6 /rest_framework/generics.py | |
| parent | 4e80541824bab0712a816716c5c63ec5623370d8 (diff) | |
| download | django-rest-framework-1a8f07def8094a1e34a656d83fc7bdba0efff184.tar.bz2 | |
GenericAPIView now applies filter_backend for list and retrieve api views
Before this commit only the MultipleObjectAPIView would apply a
filter_backend, leaving the SingleObjectAPIView to return objects you
might otherwise expect to have been filtered out.
It's worth mentioning that when a SingleObjectAPIView makes a request
for an object that should be excluded, a 404 is the expected result.
Diffstat (limited to 'rest_framework/generics.py')
| -rw-r--r-- | rest_framework/generics.py | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 9ae8cf0a..36ecf915 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -18,6 +18,16 @@ class GenericAPIView(views.APIView): model = None serializer_class = None model_serializer_class = api_settings.DEFAULT_MODEL_SERIALIZER_CLASS + filter_backend = api_settings.FILTER_BACKEND + + def filter_queryset(self, queryset): + """ + Given a queryset, filter it with whichever filter backend is in use. + """ + if not self.filter_backend: + return queryset + backend = self.filter_backend() + return backend.filter_queryset(self.request, queryset, self) def get_serializer_context(self): """ @@ -81,16 +91,6 @@ class MultipleObjectAPIView(MultipleObjectMixin, GenericAPIView): paginate_by = api_settings.PAGINATE_BY paginate_by_param = api_settings.PAGINATE_BY_PARAM pagination_serializer_class = api_settings.DEFAULT_PAGINATION_SERIALIZER_CLASS - filter_backend = api_settings.FILTER_BACKEND - - def filter_queryset(self, queryset): - """ - Given a queryset, filter it with whichever filter backend is in use. - """ - if not self.filter_backend: - return queryset - backend = self.filter_backend() - return backend.filter_queryset(self.request, queryset, self) def get_pagination_serializer(self, page=None): """ |
