55from django .db import models
66from django .utils .text import capfirst
77from django_filters import Filter , MultipleChoiceFilter
8- from django_filters .filterset import FilterSet , FilterSetMetaclass
8+ from django_filters .filterset import BaseFilterSet , FilterSet , FilterSetMetaclass
99from django_filters .filterset import FILTER_FOR_DBFIELD_DEFAULTS
1010
1111from graphql_relay .node .node import from_global_id
@@ -29,9 +29,6 @@ def filter(self, qs, value):
2929 return super (GlobalIDMultipleChoiceFilter , self ).filter (qs , gids )
3030
3131
32- ORDER_BY_FIELD = getattr (settings , 'GRAPHENE_ORDER_BY_FIELD' , 'order_by' )
33-
34-
3532GRAPHENE_FILTER_SET_OVERRIDES = {
3633 models .AutoField : {
3734 'filter_class' : GlobalIDFilter ,
@@ -48,25 +45,7 @@ def filter(self, qs, value):
4845}
4946
5047
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 ):
7049 FILTER_DEFAULTS = dict (itertools .chain (
7150 FILTER_FOR_DBFIELD_DEFAULTS .items (),
7251 GRAPHENE_FILTER_SET_OVERRIDES .items ()
@@ -93,26 +72,17 @@ def filter_for_reverse_field(cls, f, name):
9372 return GlobalIDFilter (** default )
9473
9574
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-
10575def setup_filterset (filterset_class ):
10676 """ Wrap a provided filterset in Graphene-specific functionality
10777 """
10878 return type (
10979 'Graphene{}' .format (filterset_class .__name__ ),
110- (six . with_metaclass ( GrapheneFilterSetMetaclass , GrapheneFilterSetMixin , filterset_class ), ),
80+ (filterset_class , GrapheneFilterSetMixin ),
11181 {},
11282 )
11383
11484
115- def custom_filterset_factory (model , filterset_base_class = GrapheneFilterSet ,
85+ def custom_filterset_factory (model , filterset_base_class = FilterSet ,
11686 ** meta ):
11787 """ Create a filterset for the given model using the provided meta data
11888 """
@@ -122,7 +92,7 @@ def custom_filterset_factory(model, filterset_base_class=GrapheneFilterSet,
12292 meta_class = type (str ('Meta' ), (object ,), meta )
12393 filterset = type (
12494 str ('%sFilterSet' % model ._meta .object_name ),
125- (filterset_base_class ,),
95+ (filterset_base_class , GrapheneFilterSetMixin ),
12696 {
12797 'Meta' : meta_class
12898 }
0 commit comments