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