@@ -412,6 +412,114 @@ def test_global_id_field_relation():
412412 assert id_filter .field_class == GlobalIDFormField
413413
414414
415+ def test_global_id_field_relation_with_filter ():
416+ class ReporterFilterNode (DjangoObjectType ):
417+ class Meta :
418+ model = Reporter
419+ interfaces = (Node ,)
420+ filter_fields = ["first_name" , "articles" ]
421+
422+ class ArticleFilterNode (DjangoObjectType ):
423+ class Meta :
424+ model = Article
425+ interfaces = (Node ,)
426+ filter_fields = ["headline" , "reporter" ]
427+
428+ class Query (ObjectType ):
429+ all_reporters = DjangoFilterConnectionField (ReporterFilterNode )
430+ all_articles = DjangoFilterConnectionField (ArticleFilterNode )
431+ reporter = Field (ReporterFilterNode )
432+ article = Field (ArticleFilterNode )
433+
434+ r1 = Reporter .objects .create (first_name = "r1" , last_name = "r1" , email = "r1@test.com" )
435+ r2 = Reporter .objects .create (first_name = "r2" , last_name = "r2" , email = "r2@test.com" )
436+ Article .objects .create (
437+ headline = "a1" ,
438+ pub_date = datetime .now (),
439+ pub_date_time = datetime .now (),
440+ reporter = r1 ,
441+ editor = r1 ,
442+ )
443+ Article .objects .create (
444+ headline = "a2" ,
445+ pub_date = datetime .now (),
446+ pub_date_time = datetime .now (),
447+ reporter = r2 ,
448+ editor = r2 ,
449+ )
450+
451+ # Query articles created by the reporter `r1`
452+ query = """
453+ query {
454+ allArticles (reporter: "UmVwb3J0ZXJGaWx0ZXJOb2RlOjE=") {
455+ edges {
456+ node {
457+ id
458+ }
459+ }
460+ }
461+ }
462+ """
463+ schema = Schema (query = Query )
464+ result = schema .execute (query )
465+ assert not result .errors
466+ # We should only get back a single article
467+ assert len (result .data ["allArticles" ]["edges" ]) == 1
468+
469+
470+ def test_global_id_field_relation_with_filter_not_valid_id ():
471+ class ReporterFilterNode (DjangoObjectType ):
472+ class Meta :
473+ model = Reporter
474+ interfaces = (Node ,)
475+ filter_fields = ["first_name" , "articles" ]
476+
477+ class ArticleFilterNode (DjangoObjectType ):
478+ class Meta :
479+ model = Article
480+ interfaces = (Node ,)
481+ filter_fields = ["headline" , "reporter" ]
482+
483+ class Query (ObjectType ):
484+ all_reporters = DjangoFilterConnectionField (ReporterFilterNode )
485+ all_articles = DjangoFilterConnectionField (ArticleFilterNode )
486+ reporter = Field (ReporterFilterNode )
487+ article = Field (ArticleFilterNode )
488+
489+ r1 = Reporter .objects .create (first_name = "r1" , last_name = "r1" , email = "r1@test.com" )
490+ r2 = Reporter .objects .create (first_name = "r2" , last_name = "r2" , email = "r2@test.com" )
491+ Article .objects .create (
492+ headline = "a1" ,
493+ pub_date = datetime .now (),
494+ pub_date_time = datetime .now (),
495+ reporter = r1 ,
496+ editor = r1 ,
497+ )
498+ Article .objects .create (
499+ headline = "a2" ,
500+ pub_date = datetime .now (),
501+ pub_date_time = datetime .now (),
502+ reporter = r2 ,
503+ editor = r2 ,
504+ )
505+
506+ # Filter by the global ID that does not exist
507+ query = """
508+ query {
509+ allArticles (reporter: "fake_global_id") {
510+ edges {
511+ node {
512+ id
513+ }
514+ }
515+ }
516+ }
517+ """
518+ schema = Schema (query = Query )
519+ result = schema .execute (query )
520+ assert "Invalid ID specified." in result .errors [0 ].message
521+
522+
415523def test_global_id_multiple_field_implicit ():
416524 field = DjangoFilterConnectionField (ReporterNode , fields = ["pets" ])
417525 filterset_class = field .filterset_class
0 commit comments