@@ -221,7 +221,12 @@ def reference_resolver(root, *args, **kwargs):
221
221
return None
222
222
223
223
if isinstance (field , mongoengine .GenericReferenceField ):
224
- return graphene .Field (_union , resolver = reference_resolver ,
224
+ field_resolver = None
225
+ if field .db_field is not None :
226
+ resolver_function = getattr (_union , "resolve_" + field .db_field , None )
227
+ if resolver_function and callable (resolver_function ):
228
+ field_resolver = resolver_function
229
+ return graphene .Field (_union , resolver = field_resolver if field_resolver else reference_resolver ,
225
230
description = get_field_description (field , registry ))
226
231
227
232
return graphene .Field (_union )
@@ -259,14 +264,20 @@ def dynamic_type():
259
264
_type = registry .get_type_for_model (model )
260
265
if not _type :
261
266
return None
262
- elif isinstance (field , mongoengine .ReferenceField ):
263
- return graphene .Field (_type , resolver = reference_resolver ,
267
+ if isinstance (field , mongoengine .EmbeddedDocumentField ):
268
+ return graphene .Field (_type ,
264
269
description = get_field_description (field , registry ))
265
- elif isinstance (field , mongoengine .CachedReferenceField ):
266
- return graphene .Field (_type , resolver = cached_reference_resolver ,
270
+ field_resolver = None
271
+ if field .db_field is not None :
272
+ resolver_function = getattr (_type , "resolve_" + field .db_field , None )
273
+ if resolver_function and callable (resolver_function ):
274
+ field_resolver = resolver_function
275
+ if isinstance (field , mongoengine .ReferenceField ):
276
+ return graphene .Field (_type , resolver = field_resolver if field_resolver else reference_resolver ,
277
+ description = get_field_description (field , registry ))
278
+ else :
279
+ return graphene .Field (_type , resolver = field_resolver if field_resolver else cached_reference_resolver (),
267
280
description = get_field_description (field , registry ))
268
- return graphene .Field (_type ,
269
- description = get_field_description (field , registry ))
270
281
271
282
return graphene .Dynamic (dynamic_type )
272
283
@@ -288,12 +299,16 @@ def lazy_resolver(root, *args, **kwargs):
288
299
289
300
def dynamic_type ():
290
301
_type = registry .get_type_for_model (model )
291
-
292
302
if not _type :
293
303
return None
304
+ field_resolver = None
305
+ if field .db_field is not None :
306
+ resolver_function = getattr (_type , "resolve_" + field .db_field , None )
307
+ if resolver_function and callable (resolver_function ):
308
+ field_resolver = resolver_function
294
309
return graphene .Field (
295
310
_type ,
296
- resolver = lazy_resolver ,
311
+ resolver = field_resolver if field_resolver else lazy_resolver ,
297
312
description = get_field_description (field , registry ),
298
313
)
299
314
0 commit comments