5
5
from django .db import models
6
6
from django .utils .text import capfirst
7
7
from django_filters import Filter , MultipleChoiceFilter
8
- from django_filters .filterset import FilterSet , FilterSetMetaclass
8
+ from django_filters .filterset import BaseFilterSet , FilterSet , FilterSetMetaclass
9
9
from django_filters .filterset import FILTER_FOR_DBFIELD_DEFAULTS
10
10
11
11
from graphql_relay .node .node import from_global_id
@@ -29,9 +29,6 @@ def filter(self, qs, value):
29
29
return super (GlobalIDMultipleChoiceFilter , self ).filter (qs , gids )
30
30
31
31
32
- ORDER_BY_FIELD = getattr (settings , 'GRAPHENE_ORDER_BY_FIELD' , 'order_by' )
33
-
34
-
35
32
GRAPHENE_FILTER_SET_OVERRIDES = {
36
33
models .AutoField : {
37
34
'filter_class' : GlobalIDFilter ,
@@ -48,25 +45,7 @@ def filter(self, qs, value):
48
45
}
49
46
50
47
51
- # Only useful for Django-filter 0.14-, not necessary in latest version 0.15+
52
- class GrapheneFilterSetMetaclass (FilterSetMetaclass ):
53
-
54
- def __new__ (cls , name , bases , attrs ):
55
- new_class = super (GrapheneFilterSetMetaclass , cls ).__new__ (cls , name , bases , attrs )
56
- # Customise the filter_overrides for Graphene
57
- if hasattr (new_class , '_meta' ) and hasattr (new_class ._meta , 'filter_overrides' ):
58
- filter_overrides = new_class ._meta .filter_overrides
59
- else :
60
- filter_overrides = new_class .filter_overrides
61
-
62
- for k , v in GRAPHENE_FILTER_SET_OVERRIDES .items ():
63
- filter_overrides .setdefault (k , v )
64
-
65
- return new_class
66
-
67
-
68
- class GrapheneFilterSetMixin (object ):
69
- order_by_field = ORDER_BY_FIELD
48
+ class GrapheneFilterSetMixin (BaseFilterSet ):
70
49
FILTER_DEFAULTS = dict (itertools .chain (
71
50
FILTER_FOR_DBFIELD_DEFAULTS .items (),
72
51
GRAPHENE_FILTER_SET_OVERRIDES .items ()
@@ -93,26 +72,17 @@ def filter_for_reverse_field(cls, f, name):
93
72
return GlobalIDFilter (** default )
94
73
95
74
96
- class GrapheneFilterSet (six .with_metaclass (GrapheneFilterSetMetaclass , GrapheneFilterSetMixin , FilterSet )):
97
- """ Base class for FilterSets used by Graphene
98
-
99
- You shouldn't usually need to use this class. The
100
- DjangoFilterConnectionField will wrap FilterSets with this class as
101
- necessary
102
- """
103
-
104
-
105
75
def setup_filterset (filterset_class ):
106
76
""" Wrap a provided filterset in Graphene-specific functionality
107
77
"""
108
78
return type (
109
79
'Graphene{}' .format (filterset_class .__name__ ),
110
- (six . with_metaclass ( GrapheneFilterSetMetaclass , GrapheneFilterSetMixin , filterset_class ), ),
80
+ (filterset_class , GrapheneFilterSetMixin ),
111
81
{},
112
82
)
113
83
114
84
115
- def custom_filterset_factory (model , filterset_base_class = GrapheneFilterSet ,
85
+ def custom_filterset_factory (model , filterset_base_class = FilterSet ,
116
86
** meta ):
117
87
""" Create a filterset for the given model using the provided meta data
118
88
"""
@@ -122,7 +92,7 @@ def custom_filterset_factory(model, filterset_base_class=GrapheneFilterSet,
122
92
meta_class = type (str ('Meta' ), (object ,), meta )
123
93
filterset = type (
124
94
str ('%sFilterSet' % model ._meta .object_name ),
125
- (filterset_base_class ,),
95
+ (filterset_base_class , GrapheneFilterSetMixin ),
126
96
{
127
97
'Meta' : meta_class
128
98
}
0 commit comments