mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +03:00 
			
		
		
		
	Added get_filter_backends method
This commit is contained in:
		
							parent
							
								
									4d894fd39e
								
							
						
					
					
						commit
						82e9ddcf7a
					
				| 
						 | 
					@ -121,6 +121,22 @@ 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)`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Returns the classes that should be used to filter the queryset. Defaults to returning the `filter_backends` attribute.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					May be override to provide more complex behavior with filters, as using different (or even exlusive) lists of filter_backends depending on different criteria.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return (CategoryFilter,)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### `get_serializer_class(self)`
 | 
					#### `get_serializer_class(self)`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Returns the class that should be used for the serializer.  Defaults to returning the `serializer_class` attribute, or dynamically generating a serializer class if the `model` shortcut is being used.
 | 
					Returns the class that should be used for the serializer.  Defaults to returning the `serializer_class` attribute, or dynamically generating a serializer class if the `model` shortcut is being used.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -175,6 +175,14 @@ class GenericAPIView(views.APIView):
 | 
				
			||||||
        method if you want to apply the configured filtering backend to the
 | 
					        method if you want to apply the configured filtering backend to the
 | 
				
			||||||
        default queryset.
 | 
					        default queryset.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					        for backend in self.get_filter_backends():
 | 
				
			||||||
 | 
					            queryset = backend().filter_queryset(self.request, queryset, self)
 | 
				
			||||||
 | 
					        return queryset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_filter_backends(self):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Returns the list of filter backends that this view requires.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
        filter_backends = self.filter_backends or []
 | 
					        filter_backends = self.filter_backends or []
 | 
				
			||||||
        if not filter_backends and self.filter_backend:
 | 
					        if not filter_backends and self.filter_backend:
 | 
				
			||||||
            warnings.warn(
 | 
					            warnings.warn(
 | 
				
			||||||
| 
						 | 
					@ -185,10 +193,8 @@ class GenericAPIView(views.APIView):
 | 
				
			||||||
                PendingDeprecationWarning, stacklevel=2
 | 
					                PendingDeprecationWarning, stacklevel=2
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            filter_backends = [self.filter_backend]
 | 
					            filter_backends = [self.filter_backend]
 | 
				
			||||||
 | 
					        return filter_backends
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for backend in filter_backends:
 | 
					 | 
				
			||||||
            queryset = backend().filter_queryset(self.request, queryset, self)
 | 
					 | 
				
			||||||
        return queryset
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ########################
 | 
					    ########################
 | 
				
			||||||
    ### The following methods provide default implementations
 | 
					    ### The following methods provide default implementations
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user