Skip to content

Commit d42a224

Browse files
Arun S KumarArun S Kumar
authored andcommitted
CachedReferenceField - bug fixed
1 parent 16f97a3 commit d42a224

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

graphene_mongo/converter.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)