1
+ from collections import OrderedDict
1
2
from functools import partial
2
3
4
+ from graphene .types .argument import to_arguments
3
5
from ..fields import DjangoConnectionField
4
6
from .utils import get_filtering_args_from_filterset , get_filterset_class
5
7
@@ -9,19 +11,52 @@ class DjangoFilterConnectionField(DjangoConnectionField):
9
11
def __init__ (self , type , fields = None , order_by = None ,
10
12
extra_filter_meta = None , filterset_class = None ,
11
13
* args , ** kwargs ):
14
+ self ._order_by = order_by
15
+ self ._fields = fields
16
+ self ._type = type
17
+ self ._filterset_class = filterset_class
18
+ self ._extra_filter_meta = extra_filter_meta
19
+ self ._base_args = None
20
+ super (DjangoFilterConnectionField , self ).__init__ (type , * args , ** kwargs )
21
+
22
+ @property
23
+ def node_type (self ):
24
+ if callable (self ._type ):
25
+ return self ._type ()
26
+ return self ._type
27
+
28
+ @property
29
+ def order_by (self ):
30
+ return self ._order_by or self .node_type ._meta .filter_order_by
12
31
13
- self . order_by = order_by or type . _meta . filter_order_by
14
- self . fields = fields or type . _meta . filter_fields
15
- meta = dict (model = type ._meta .model ,
32
+ @ property
33
+ def meta ( self ):
34
+ meta = dict (model = self . node_type ._meta .model ,
16
35
fields = self .fields ,
17
36
order_by = self .order_by )
18
- if extra_filter_meta :
19
- meta .update (extra_filter_meta )
20
- self .filterset_class = get_filterset_class (filterset_class , ** meta )
21
- self .filtering_args = get_filtering_args_from_filterset (self .filterset_class , type )
22
- kwargs .setdefault ('args' , {})
23
- kwargs ['args' ].update (self .filtering_args )
24
- super (DjangoFilterConnectionField , self ).__init__ (type , * args , ** kwargs )
37
+ if self ._extra_filter_meta :
38
+ meta .update (self .extra_filter_meta )
39
+ return meta
40
+
41
+ @property
42
+ def fields (self ):
43
+ return self ._fields or self .node_type ._meta .filter_fields
44
+
45
+ @property
46
+ def args (self ):
47
+ return to_arguments (self ._base_args or OrderedDict (), self .filtering_args )
48
+
49
+ @args .setter
50
+ def args (self , args ):
51
+ self ._base_args = args
52
+
53
+ @property
54
+ def filterset_class (self ):
55
+ return get_filterset_class (self ._filterset_class , ** self .meta )
56
+
57
+ @property
58
+ def filtering_args (self ):
59
+ return get_filtering_args_from_filterset (self .filterset_class , self .node_type )
25
60
26
61
@staticmethod
27
62
def connection_resolver (resolver , connection , default_manager , filterset_class , filtering_args ,
0 commit comments