mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-03-03 19:00:17 +03:00
Merge pull request #3025 from linovia/documentation
Replace the former `get_filter_backends` by `filter_queryset`.
This commit is contained in:
commit
be9327ad3a
|
@ -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.
|
||||
|
||||
#### `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.
|
||||
|
||||
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.
|
||||
Given a queryset, filter it with whichever filter backends are in use, returning a new queryset.
|
||||
|
||||
For example:
|
||||
|
||||
def get_filter_backends(self):
|
||||
if "geo_route" in self.request.query_params:
|
||||
return (GeoRouteFilter, CategoryFilter)
|
||||
elif "geo_point" in self.request.query_params:
|
||||
return (GeoPointFilter, CategoryFilter)
|
||||
def filter_queryset(self, queryset):
|
||||
filter_backends = (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)`
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user