@@ -112,9 +112,14 @@ def get_reference_objects(*args, **kwargs):
112
112
document_field = convert_mongoengine_field (document_field , registry )
113
113
document_field_type = document_field .get_type ().type
114
114
queried_fields = list ()
115
+ filter_args = list ()
116
+ if document_field_type ._meta .filter_fields :
117
+ for key , values in document_field_type ._meta .filter_fields .items ():
118
+ for each in values :
119
+ filter_args .append (key + "__" + each )
115
120
for each in get_query_fields (args [0 ][3 ][0 ])[document_field_type ._meta .name ].keys ():
116
121
item = to_snake_case (each )
117
- if item in document ._fields_ordered :
122
+ if item in document ._fields_ordered + tuple ( filter_args ) :
118
123
queried_fields .append (item )
119
124
return document .objects ().no_dereference ().only (
120
125
* set (list (document_field_type ._meta .required_fields ) + queried_fields )).filter (pk__in = args [0 ][1 ])
@@ -229,12 +234,17 @@ def reference_resolver(root, *args, **kwargs):
229
234
document_field = mongoengine .ReferenceField (document )
230
235
document_field = convert_mongoengine_field (document_field , registry )
231
236
_type = document_field .get_type ().type
237
+ filter_args = list ()
238
+ if _type ._meta .filter_fields :
239
+ for key , values in _type ._meta .filter_fields .items ():
240
+ for each in values :
241
+ filter_args .append (key + "__" + each )
232
242
querying_types = list (get_query_fields (args [0 ]).keys ())
233
243
if _type .__name__ in querying_types :
234
244
queried_fields = list ()
235
245
for each in get_query_fields (args [0 ]).keys ():
236
246
item = to_snake_case (each )
237
- if item in document ._fields_ordered :
247
+ if item in document ._fields_ordered + tuple ( filter_args ) :
238
248
queried_fields .append (item )
239
249
return document .objects ().no_dereference ().only (* list (
240
250
set (list (_type ._meta .required_fields ) + queried_fields ))).get (
@@ -247,7 +257,8 @@ def reference_resolver(root, *args, **kwargs):
247
257
required = False
248
258
if field .db_field is not None :
249
259
required = field .required
250
- resolver_function = getattr (registry .get_type_for_model (field .owner_document ), "resolve_" + field .db_field , None )
260
+ resolver_function = getattr (registry .get_type_for_model (field .owner_document ), "resolve_" + field .db_field ,
261
+ None )
251
262
if resolver_function and callable (resolver_function ):
252
263
field_resolver = resolver_function
253
264
return graphene .Field (_union , resolver = field_resolver if field_resolver else reference_resolver ,
@@ -266,11 +277,16 @@ def reference_resolver(root, *args, **kwargs):
266
277
document = getattr (root , field .name or field .db_name )
267
278
if document :
268
279
queried_fields = list ()
280
+ _type = registry .get_type_for_model (field .document_type )
281
+ filter_args = list ()
282
+ if _type ._meta .filter_fields :
283
+ for key , values in _type ._meta .filter_fields .items ():
284
+ for each in values :
285
+ filter_args .append (key + "__" + each )
269
286
for each in get_query_fields (args [0 ]).keys ():
270
287
item = to_snake_case (each )
271
- if item in field .document_type ._fields_ordered :
288
+ if item in field .document_type ._fields_ordered + tuple ( filter_args ) :
272
289
queried_fields .append (item )
273
- _type = registry .get_type_for_model (field .document_type )
274
290
return field .document_type .objects ().no_dereference ().only (
275
291
* (set (list (_type ._meta .required_fields ) + queried_fields ))).get (
276
292
pk = document .id )
@@ -279,11 +295,16 @@ def reference_resolver(root, *args, **kwargs):
279
295
def cached_reference_resolver (root , * args , ** kwargs ):
280
296
if field :
281
297
queried_fields = list ()
298
+ _type = registry .get_type_for_model (field .document_type )
299
+ filter_args = list ()
300
+ if _type ._meta .filter_fields :
301
+ for key , values in _type ._meta .filter_fields .items ():
302
+ for each in values :
303
+ filter_args .append (key + "__" + each )
282
304
for each in get_query_fields (args [0 ]).keys ():
283
305
item = to_snake_case (each )
284
- if item in field .document_type ._fields_ordered :
306
+ if item in field .document_type ._fields_ordered + tuple ( filter_args ) :
285
307
queried_fields .append (item )
286
- _type = registry .get_type_for_model (field .document_type )
287
308
return field .document_type .objects ().no_dereference ().only (
288
309
* (set (
289
310
list (_type ._meta .required_fields ) + queried_fields ))).get (
@@ -301,7 +322,8 @@ def dynamic_type():
301
322
required = False
302
323
if field .db_field is not None :
303
324
required = field .required
304
- resolver_function = getattr (registry .get_type_for_model (field .owner_document ), "resolve_" + field .db_field , None )
325
+ resolver_function = getattr (registry .get_type_for_model (field .owner_document ), "resolve_" + field .db_field ,
326
+ None )
305
327
if resolver_function and callable (resolver_function ):
306
328
field_resolver = resolver_function
307
329
if isinstance (field , mongoengine .ReferenceField ):
@@ -322,11 +344,16 @@ def lazy_resolver(root, *args, **kwargs):
322
344
document = getattr (root , field .name or field .db_name )
323
345
if document :
324
346
queried_fields = list ()
347
+ _type = registry .get_type_for_model (document .document_type )
348
+ filter_args = list ()
349
+ if _type ._meta .filter_fields :
350
+ for key , values in _type ._meta .filter_fields .items ():
351
+ for each in values :
352
+ filter_args .append (key + "__" + each )
325
353
for each in get_query_fields (args [0 ]).keys ():
326
354
item = to_snake_case (each )
327
- if item in document .document_type ._fields_ordered :
355
+ if item in document .document_type ._fields_ordered + tuple ( filter_args ) :
328
356
queried_fields .append (item )
329
- _type = registry .get_type_for_model (document .document_type )
330
357
return document .document_type .objects ().no_dereference ().only (
331
358
* (set ((list (_type ._meta .required_fields ) + queried_fields )))).get (
332
359
pk = document .pk )
@@ -340,7 +367,8 @@ def dynamic_type():
340
367
required = False
341
368
if field .db_field is not None :
342
369
required = field .required
343
- resolver_function = getattr (registry .get_type_for_model (field .owner_document ), "resolve_" + field .db_field , None )
370
+ resolver_function = getattr (registry .get_type_for_model (field .owner_document ), "resolve_" + field .db_field ,
371
+ None )
344
372
if resolver_function and callable (resolver_function ):
345
373
field_resolver = resolver_function
346
374
return graphene .Field (
0 commit comments