Merge pull request #3025 from linovia/documentation

Replace the former `get_filter_backends` by `filter_queryset`.
This commit is contained in:
Xavier Ordoquy 2015-06-15 22:28:41 +02:00
commit be9327ad3a

View File

@ -124,21 +124,24 @@ For example:
Note that if your API doesn't include any object level permissions, you may optionally exclude the `self.check_object_permissions`, and simply return the object from the `get_object_or_404` lookup. Note that if your API doesn't include any object level permissions, you may optionally exclude the `self.check_object_permissions`, and simply return the object from the `get_object_or_404` lookup.
#### `get_filter_backends(self)` #### `filter_queryset(self, queryset)`
Returns the classes that should be used to filter the queryset. Defaults to returning the `filter_backends` attribute. Given a queryset, filter it with whichever filter backends are in use, returning a new queryset.
May be overridden to provide more complex behavior with filters, such as using different (or even exclusive) lists of filter_backends depending on different criteria.
For example: For example:
def get_filter_backends(self): def filter_queryset(self, queryset):
if "geo_route" in self.request.query_params: filter_backends = (CategoryFilter,)
return (GeoRouteFilter, CategoryFilter)
elif "geo_point" in self.request.query_params:
return (GeoPointFilter, CategoryFilter)
return (CategoryFilter,) if 'geo_route' in self.request.query_params:
filter_backends = (GeoRouteFilter, CategoryFilter)
elif 'geo_point' in self.request.query_params:
filter_backends = (GeoPointFilter, CategoryFilter)
for backend in list(filter_backends):
queryset = backend().filter_queryset(self.request, queryset, view=self)
return queryset
#### `get_serializer_class(self)` #### `get_serializer_class(self)`