@@ -37,15 +37,32 @@ def get_schema_fields(self, view):
37
37
return []
38
38
39
39
40
- class FilterSet (object ):
41
- def __new__ (cls , * args , ** kwargs ):
42
- warnings .warn (
43
- "The built in 'rest_framework.filters.FilterSet' is pending deprecation. "
44
- "You should use 'django_filters.rest_framework.FilterSet' instead." ,
45
- PendingDeprecationWarning
46
- )
47
- from django_filters .rest_framework import FilterSet
48
- return FilterSet (* args , ** kwargs )
40
+ if django_filters :
41
+ from django_filters .filterset import FilterSetMetaclass as DFFilterSetMetaclass
42
+ from django_filters .rest_framework .filterset import FilterSet as DFFilterSet
43
+
44
+ class FilterSetMetaclass (DFFilterSetMetaclass ):
45
+ def __new__ (cls , name , bases , attrs ):
46
+ warnings .warn (
47
+ "The built in 'rest_framework.filters.FilterSet' is pending deprecation. "
48
+ "You should use 'django_filters.rest_framework.FilterSet' instead." ,
49
+ PendingDeprecationWarning
50
+ )
51
+ return super (FilterSetMetaclass , cls ).__new__ (cls , name , bases , attrs )
52
+ _BaseFilterSet = DFFilterSet
53
+ else :
54
+ # Dummy metaclass just so we can give a user-friendly error message.
55
+ class FilterSetMetaclass (type ):
56
+ def __init__ (self , name , bases , attrs ):
57
+ # Assert only on subclasses, so we can define FilterSet below.
58
+ if bases != (object ,):
59
+ assert False , 'django-filter must be installed to use the `FilterSet` class'
60
+ super (FilterSetMetaclass , self ).__init__ (name , bases , attrs )
61
+ _BaseFilterSet = object
62
+
63
+
64
+ class FilterSet (six .with_metaclass (FilterSetMetaclass , _BaseFilterSet )):
65
+ pass
49
66
50
67
51
68
class DjangoFilterBackend (BaseFilterBackend ):
0 commit comments