7
7
import mongoengine
8
8
from bson import DBRef
9
9
from graphene import Context
10
+ from graphene .types .utils import get_type
10
11
from graphene .utils .str_converters import to_snake_case
11
12
from graphql import ResolveInfo
12
13
from promise import Promise
@@ -188,6 +189,7 @@ def get_reference_field(r, kv):
188
189
189
190
@property
190
191
def fields (self ):
192
+ self ._type = get_type (self ._type )
191
193
return self ._type ._meta .fields
192
194
193
195
def get_queryset (self , model , info , required_fields = list (), skip = None , limit = None , reversed = False , ** args ):
@@ -236,14 +238,13 @@ def get_queryset(self, model, info, required_fields=list(), skip=None, limit=Non
236
238
237
239
def default_resolver (self , _root , info , required_fields = list (), ** args ):
238
240
args = args or {}
239
-
240
241
if _root is not None :
241
242
field_name = to_snake_case (info .field_name )
242
- if getattr (_root , field_name , []) is not None :
243
- args ["pk__in" ] = [r .id for r in getattr (_root , field_name , [])]
243
+ if field_name in _root ._fields_ordered :
244
+ if getattr (_root , field_name , []) is not None :
245
+ args ["pk__in" ] = [r .id for r in getattr (_root , field_name , [])]
244
246
245
247
_id = args .pop ('id' , None )
246
-
247
248
if _id is not None :
248
249
args ['pk' ] = from_global_id (_id )[- 1 ]
249
250
iterables = []
@@ -257,10 +258,6 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
257
258
after = cursor_to_offset (args .pop ("after" , None ))
258
259
last = args .pop ("last" , None )
259
260
before = cursor_to_offset (args .pop ("before" , None ))
260
- if after is not None :
261
- has_previous_page = after > 0
262
- elif (before is not None and last is not None ):
263
- has_previous_page = before - last <= 0
264
261
if "pk__in" in args and args ["pk__in" ]:
265
262
count = len (args ["pk__in" ])
266
263
skip , limit , reverse = find_skip_and_limit (first = first , last = last , after = after , before = before ,
@@ -278,7 +275,7 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
278
275
if not info .context :
279
276
info .context = Context ()
280
277
info .context .queryset = self .get_queryset (self .model , info , required_fields , ** args )
281
- elif _root is None :
278
+ else :
282
279
count = self .get_queryset (self .model , info , required_fields , ** args ).count ()
283
280
if count != 0 :
284
281
skip , limit , reverse = find_skip_and_limit (first = first , after = after , last = last , before = before ,
@@ -301,7 +298,6 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
301
298
connection_type = self .type ,
302
299
edge_type = self .type .Edge ,
303
300
pageinfo_type = graphene .PageInfo )
304
-
305
301
connection .iterable = iterables
306
302
connection .list_length = list_length
307
303
return connection
0 commit comments