@@ -32,40 +32,33 @@ class DjangoFilterBackend(BaseFilterBackend):
32
32
def __init__ (self ):
33
33
assert django_filters , 'Using DjangoFilterBackend, but django-filter is not installed'
34
34
35
- def get_filter_class (self , view ):
35
+ def get_filter_class (self , view , queryset = None ):
36
36
"""
37
37
Return the django-filters `FilterSet` used to filter the queryset.
38
38
"""
39
39
filter_class = getattr (view , 'filter_class' , None )
40
40
filter_fields = getattr (view , 'filter_fields' , None )
41
- model_cls = getattr (view , 'model' , None )
42
- queryset = getattr (view , 'queryset' , None )
43
- if model_cls is None and queryset is not None :
44
- model_cls = queryset .model
45
41
46
42
if filter_class :
47
43
filter_model = filter_class .Meta .model
48
44
49
- assert issubclass (filter_model , model_cls ), \
50
- 'FilterSet model %s does not match view model %s' % \
51
- (filter_model , model_cls )
45
+ assert issubclass (filter_model , queryset . model ), \
46
+ 'FilterSet model %s does not match queryset model %s' % \
47
+ (filter_model , queryset . model )
52
48
53
49
return filter_class
54
50
55
51
if filter_fields :
56
- assert model_cls is not None , 'Cannot use DjangoFilterBackend ' \
57
- 'on a view which does not have a .model or .queryset attribute.'
58
-
59
52
class AutoFilterSet (self .default_filter_set ):
60
53
class Meta :
61
- model = model_cls
54
+ model = queryset . model
62
55
fields = filter_fields
63
56
return AutoFilterSet
64
57
65
58
return None
66
59
67
60
def filter_queryset (self , request , queryset , view ):
68
- filter_class = self .get_filter_class (view )
61
+ filter_class = self .get_filter_class (view , queryset )
69
62
70
63
if filter_class :
71
64
return filter_class (request .QUERY_PARAMS , queryset = queryset ).qs
0 commit comments