@@ -110,10 +110,14 @@ def get_reference_objects(*args, **kwargs):
110
110
document = get_document (args [0 ][0 ])
111
111
document_field = mongoengine .ReferenceField (document )
112
112
document_field = convert_mongoengine_field (document_field , registry )
113
- document_field_type = document_field .get_type ().type ._meta .name
114
- required_fields = [to_snake_case (i ) for i in
115
- get_query_fields (args [0 ][3 ][0 ])[document_field_type ].keys ()]
116
- return document .objects ().no_dereference ().only (* required_fields ).filter (pk__in = args [0 ][1 ])
113
+ document_field_type = document_field .get_type ().type
114
+ queried_fields = list ()
115
+ for each in get_query_fields (args [0 ][3 ][0 ])[document_field_type ._meta .name ].keys ():
116
+ item = to_snake_case (each )
117
+ if item in document ._fields_ordered :
118
+ queried_fields .append (item )
119
+ return document .objects ().no_dereference ().only (
120
+ * set (list (document_field_type ._meta .required_fields ) + queried_fields )).filter (pk__in = args [0 ][1 ])
117
121
118
122
def get_non_querying_object (* args , ** kwargs ):
119
123
model = get_document (args [0 ][0 ])
@@ -228,9 +232,13 @@ def reference_resolver(root, *args, **kwargs):
228
232
querying_types = list (get_query_fields (args [0 ]).keys ())
229
233
_type = document_field .get_type ().type
230
234
if _type .__name__ in querying_types :
235
+ queried_fields = list ()
236
+ for each in get_query_fields (args [0 ]).keys ():
237
+ item = to_snake_case (each )
238
+ if item in document ._fields_ordered :
239
+ queried_fields .append (item )
231
240
return document .objects ().no_dereference ().only (* list (
232
- set (list (_type ._meta .required_fields ) + [to_snake_case (i ) for i in
233
- get_query_fields (args [0 ])[_type ._meta .name ].keys ()]))).get (
241
+ set (list (_type ._meta .required_fields ) + queried_fields ))).get (
234
242
pk = de_referenced ["_ref" ].id )
235
243
return document
236
244
return None
@@ -258,20 +266,28 @@ def convert_field_to_dynamic(field, registry=None):
258
266
def reference_resolver (root , * args , ** kwargs ):
259
267
document = getattr (root , field .name or field .db_name )
260
268
if document :
269
+ queried_fields = list ()
270
+ for each in get_query_fields (args [0 ]).keys ():
271
+ item = to_snake_case (each )
272
+ if item in field .document_type ._fields_ordered :
273
+ queried_fields .append (item )
261
274
_type = registry .get_type_for_model (field .document_type )
262
275
return field .document_type .objects ().no_dereference ().only (
263
- * ((list (set (list (_type ._meta .required_fields ) + [to_snake_case (i ) for i in
264
- get_query_fields (args [0 ]).keys ()]))))).get (
276
+ * (set (list (_type ._meta .required_fields ) + queried_fields ))).get (
265
277
pk = document .id )
266
278
return None
267
279
268
280
def cached_reference_resolver (root , * args , ** kwargs ):
269
281
if field :
282
+ queried_fields = list ()
283
+ for each in get_query_fields (args [0 ]).keys ():
284
+ item = to_snake_case (each )
285
+ if item in field .document_type ._fields_ordered :
286
+ queried_fields .append (item )
270
287
_type = registry .get_type_for_model (field .document_type )
271
288
return field .document_type .objects ().no_dereference ().only (
272
- * (list (set (
273
- list (_type ._meta .required_fields ) + [to_snake_case (i ) for i in
274
- get_query_fields (args [0 ]).keys ()])))).get (
289
+ * (set (
290
+ list (_type ._meta .required_fields ) + queried_fields ))).get (
275
291
pk = getattr (root , field .name or field .db_name ))
276
292
return None
277
293
@@ -306,10 +322,14 @@ def convert_lazy_field_to_dynamic(field, registry=None):
306
322
def lazy_resolver (root , * args , ** kwargs ):
307
323
document = getattr (root , field .name or field .db_name )
308
324
if document :
325
+ queried_fields = list ()
326
+ for each in get_query_fields (args [0 ]).keys ():
327
+ item = to_snake_case (each )
328
+ if item in document .document_type ._fields_ordered :
329
+ queried_fields .append (item )
309
330
_type = registry .get_type_for_model (document .document_type )
310
331
return document .document_type .objects ().no_dereference ().only (
311
- * (list (set ((list (_type ._meta .required_fields ) + [to_snake_case (i ) for i in
312
- get_query_fields (args [0 ]).keys ()]))))).get (
332
+ * (set ((list (_type ._meta .required_fields ) + queried_fields )))).get (
313
333
pk = document .pk )
314
334
return None
315
335
0 commit comments