@@ -245,10 +245,12 @@ def get_queryset(self, model, info, required_fields=list(), skip=None, limit=Non
245
245
246
246
def default_resolver (self , _root , info , required_fields = list (), ** args ):
247
247
args = args or {}
248
-
249
248
if _root is not None :
250
249
field_name = to_snake_case (info .field_name )
251
- if field_name in _root ._fields_ordered :
250
+ if field_name in _root ._fields_ordered and not (isinstance (_root ._fields [field_name ].field ,
251
+ mongoengine .EmbeddedDocumentField ) or
252
+ isinstance (_root ._fields [field_name ].field ,
253
+ mongoengine .GenericEmbeddedDocumentField )):
252
254
if getattr (_root , field_name , []) is not None :
253
255
args ["pk__in" ] = [r .id for r in getattr (_root , field_name , [])]
254
256
@@ -262,11 +264,11 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
262
264
count = 0
263
265
limit = None
264
266
reverse = False
267
+ first = args .pop ("first" , None )
268
+ after = cursor_to_offset (args .pop ("after" , None ))
269
+ last = args .pop ("last" , None )
270
+ before = cursor_to_offset (args .pop ("before" , None ))
265
271
if callable (getattr (self .model , "objects" , None )):
266
- first = args .pop ("first" , None )
267
- after = cursor_to_offset (args .pop ("after" , None ))
268
- last = args .pop ("last" , None )
269
- before = cursor_to_offset (args .pop ("before" , None ))
270
272
if "pk__in" in args and args ["pk__in" ]:
271
273
count = len (args ["pk__in" ])
272
274
skip , limit , reverse = find_skip_and_limit (first = first , last = last , after = after , before = before ,
@@ -295,6 +297,22 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
295
297
if not info .context :
296
298
info .context = Context ()
297
299
info .context .queryset = self .get_queryset (self .model , info , required_fields , ** args )
300
+
301
+ elif _root is not None :
302
+ field_name = to_snake_case (info .field_name )
303
+ items = getattr (_root , field_name , [])
304
+ count = len (items )
305
+ skip , limit , reverse = find_skip_and_limit (first = first , last = last , after = after , before = before ,
306
+ count = count )
307
+ if limit :
308
+ if reverse :
309
+ items = items [::- 1 ][skip :skip + limit ]
310
+ else :
311
+ items = items [skip :skip + limit ]
312
+ elif skip :
313
+ items = items [skip :]
314
+ iterables = items
315
+ list_length = len (iterables )
298
316
has_next_page = True if (0 if limit is None else limit ) + (0 if skip is None else skip ) < count else False
299
317
has_previous_page = True if skip else False
300
318
if reverse :
0 commit comments