Skip to content

Commit afa284d

Browse files
Arun S KumarArun S Kumar
authored andcommitted
Bugs fixed
1 parent 4c17e86 commit afa284d

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

graphene_mongo/converter.py

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ def get_reference_objects(*args, **kwargs):
112112
document_field = mongoengine.ReferenceField(document)
113113
document_field = convert_mongoengine_field(document_field, registry)
114114
document_field_type = document_field.get_type().type._meta.name
115-
only_fields = [to_snake_case(i) for i in get_query_fields(args[0][3][0])[document_field_type].keys()]
115+
only_fields = [to_snake_case(i) for i in
116+
get_query_fields(args[0][3][0])[document_field_type].keys()]
116117
return document.objects().no_dereference().only(*only_fields).filter(pk__in=args[0][1])
117118
else:
118119
return []
@@ -208,9 +209,12 @@ def reference_resolver(root, *args, **kwargs):
208209
document = get_document(dereferenced["_cls"])
209210
document_field = mongoengine.ReferenceField(document)
210211
document_field = convert_mongoengine_field(document_field, registry)
211-
document_field_type = document_field.get_type().type._meta.name
212-
only_fields = [to_snake_case(i) for i in get_query_fields(args[0])[document_field_type].keys()]
213-
return document.objects().no_dereference().only(*only_fields).get(pk=dereferenced["_ref"].id)
212+
_type = document_field.get_type().type
213+
only_fields = _type._meta.only_fields.split(",") if isinstance(_type._meta.only_fields,
214+
str) else list()
215+
return document.objects().no_dereference().only(*list(
216+
set(only_fields + [to_snake_case(i) for i in get_query_fields(args[0])[_type._meta.name].keys()]))).get(
217+
pk=dereferenced["_ref"].id)
214218

215219
if isinstance(field, mongoengine.GenericReferenceField):
216220
return graphene.Field(_union, resolver=reference_resolver,
@@ -228,25 +232,21 @@ def convert_field_to_dynamic(field, registry=None):
228232
def reference_resolver(root, *args, **kwargs):
229233
document = getattr(root, field.name or field.db_name)
230234
if document:
231-
only_fields = [to_snake_case(i) for i in get_query_fields(args[0]).keys()]
232-
return field.document_type.objects().no_dereference().only(*only_fields).get(pk=document.id)
235+
_type = registry.get_type_for_model(field.document_type)
236+
only_fields = _type._meta.only_fields.split(",") if isinstance(_type._meta.only_fields,
237+
str) else list()
238+
return field.document_type.objects().no_dereference().only(
239+
*((list(set(only_fields + [to_snake_case(i) for i in get_query_fields(args[0]).keys()])))
240+
)).get(pk=document.id)
233241
return None
234242

235-
def cached_reference_resolver(root, *args, **kwargs):
236-
only_fields = [to_snake_case(i) for i in get_query_fields(args[0]).keys()]
237-
return field.document_type.objects().no_dereference().only(*only_fields).get(
238-
pk=getattr(root, field.name or field.db_name))
239-
240243
def dynamic_type():
241244
_type = registry.get_type_for_model(model)
242245
if not _type:
243246
return None
244-
elif isinstance(field, mongoengine.ReferenceField):
247+
elif isinstance(field, mongoengine.ReferenceField) or isinstance(field, mongoengine.CachedReferenceField):
245248
return graphene.Field(_type, resolver=reference_resolver,
246249
description=get_field_description(field, registry))
247-
elif isinstance(field, mongoengine.CachedReferenceField):
248-
return graphene.Field(_type, resolver=cached_reference_resolver,
249-
description=get_field_description(field, registry))
250250
return graphene.Field(_type,
251251
description=get_field_description(field, registry))
252252

@@ -259,11 +259,16 @@ def convert_lazy_field_to_dynamic(field, registry=None):
259259

260260
def lazy_resolver(root, *args, **kwargs):
261261
document = getattr(root, field.name or field.db_name)
262-
only_fields = [to_snake_case(i) for i in get_query_fields(args[0]).keys()]
263-
return document.document_type.objects().no_dereference().only(*only_fields).get(pk=document.pk)
262+
_type = registry.get_type_for_model(document.document_type)
263+
only_fields = _type._meta.only_fields.split(",") if isinstance(_type._meta.only_fields,
264+
str) else list()
265+
return document.document_type.objects().no_dereference().only(
266+
*(list(set((only_fields + [to_snake_case(i) for i in get_query_fields(args[0]).keys()]))))).get(
267+
pk=document.pk)
264268

265269
def dynamic_type():
266270
_type = registry.get_type_for_model(model)
271+
267272
if not _type:
268273
return None
269274
return graphene.Field(

0 commit comments

Comments
 (0)