@@ -408,3 +408,95 @@ class Query(ObjectType):
408
408
{"firstName" : "Debra" , "articles" : []},
409
409
]
410
410
}
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