@@ -240,13 +240,25 @@ def reference_resolver(root, *args, **kwargs):
240240 pk = document .id )
241241 return None
242242
243+ def cached_reference_resolver (root , * args , ** kwargs ):
244+ _type = registry .get_type_for_model (field .document_type )
245+ only_fields = _type ._meta .only_fields .split ("," ) if isinstance (_type ._meta .only_fields ,
246+ str ) else list ()
247+ return field .document_type .objects ().no_dereference ().only (
248+ * (list (set (only_fields + [to_snake_case (i ) for i in get_query_fields (args [0 ]).keys ()]))
249+ )).get (
250+ pk = getattr (root , field .name or field .db_name ))
251+
243252 def dynamic_type ():
244253 _type = registry .get_type_for_model (model )
245254 if not _type :
246255 return None
247- elif isinstance (field , mongoengine .ReferenceField ) or isinstance ( field , mongoengine . CachedReferenceField ) :
256+ elif isinstance (field , mongoengine .ReferenceField ):
248257 return graphene .Field (_type , resolver = reference_resolver ,
249258 description = get_field_description (field , registry ))
259+ elif isinstance (field , mongoengine .CachedReferenceField ):
260+ return graphene .Field (_type , resolver = cached_reference_resolver ,
261+ description = get_field_description (field , registry ))
250262 return graphene .Field (_type ,
251263 description = get_field_description (field , registry ))
252264
0 commit comments