@@ -408,3 +408,95 @@ class Query(ObjectType):
408408 {"firstName" : "Debra" , "articles" : []},
409409 ]
410410 }
411+
412+ def test_resolve_list_external_resolver (self ):
413+ """Resolving a plain list from external resolver should work (and not call get_queryset)"""
414+
415+ class Reporter (DjangoObjectType ):
416+ class Meta :
417+ model = ReporterModel
418+ fields = ("first_name" , "articles" )
419+
420+ @classmethod
421+ def get_queryset (cls , queryset , info ):
422+ # Only get reporters with at least 1 article
423+ return queryset .annotate (article_count = Count ("articles" )).filter (
424+ article_count__gt = 0
425+ )
426+
427+ def resolve_reporters (_ , info ):
428+ return [ReporterModel .objects .get (first_name = "Debra" )]
429+
430+ class Query (ObjectType ):
431+ reporters = DjangoListField (Reporter , resolver = resolve_reporters )
432+
433+ schema = Schema (query = Query )
434+
435+ query = """
436+ query {
437+ reporters {
438+ firstName
439+ }
440+ }
441+ """
442+
443+ r1 = ReporterModel .objects .create (first_name = "Tara" , last_name = "West" )
444+ ReporterModel .objects .create (first_name = "Debra" , last_name = "Payne" )
445+
446+ ArticleModel .objects .create (
447+ headline = "Amazing news" ,
448+ reporter = r1 ,
449+ pub_date = datetime .date .today (),
450+ pub_date_time = datetime .datetime .now (),
451+ editor = r1 ,
452+ )
453+
454+ result = schema .execute (query )
455+
456+ assert not result .errors
457+ assert result .data == {"reporters" : [{"firstName" : "Debra" }]}
458+
459+ def test_get_queryset_filter_external_resolver (self ):
460+ class Reporter (DjangoObjectType ):
461+ class Meta :
462+ model = ReporterModel
463+ fields = ("first_name" , "articles" )
464+
465+ @classmethod
466+ def get_queryset (cls , queryset , info ):
467+ # Only get reporters with at least 1 article
468+ return queryset .annotate (article_count = Count ("articles" )).filter (
469+ article_count__gt = 0
470+ )
471+
472+ def resolve_reporters (_ , info ):
473+ return ReporterModel .objects .all ()
474+
475+ class Query (ObjectType ):
476+ reporters = DjangoListField (Reporter , resolver = resolve_reporters )
477+
478+ schema = Schema (query = Query )
479+
480+ query = """
481+ query {
482+ reporters {
483+ firstName
484+ }
485+ }
486+ """
487+
488+ r1 = ReporterModel .objects .create (first_name = "Tara" , last_name = "West" )
489+ ReporterModel .objects .create (first_name = "Debra" , last_name = "Payne" )
490+
491+ ArticleModel .objects .create (
492+ headline = "Amazing news" ,
493+ reporter = r1 ,
494+ pub_date = datetime .date .today (),
495+ pub_date_time = datetime .datetime .now (),
496+ editor = r1 ,
497+ )
498+
499+ result = schema .execute (query )
500+
501+ assert not result .errors
502+ assert result .data == {"reporters" : [{"firstName" : "Tara" }]}
0 commit comments