@@ -818,3 +818,106 @@ class Query(ObjectType):
818
818
}
819
819
"""
820
820
)
821
+
822
+
823
+ def test_filter_filterset_based_on_mixin ():
824
+ class ArticleFilterMixin (FilterSet ):
825
+ @classmethod
826
+ def get_filters (cls ):
827
+ filters = super (FilterSet , cls ).get_filters ()
828
+ filters .update (
829
+ {
830
+ "viewer__email__in" : django_filters .CharFilter (
831
+ method = "filter_email_in" , field_name = "reporter__email__in"
832
+ )
833
+ }
834
+ )
835
+
836
+ return filters
837
+
838
+ def filter_email_in (cls , queryset , name , value ):
839
+ return queryset .filter (** {name : [value ]})
840
+
841
+ class NewArticleFilter (ArticleFilterMixin , ArticleFilter ):
842
+ pass
843
+
844
+ class NewReporterNode (DjangoObjectType ):
845
+ class Meta :
846
+ model = Reporter
847
+ interfaces = (Node ,)
848
+
849
+ class NewArticleFilterNode (DjangoObjectType ):
850
+ viewer = Field (NewReporterNode )
851
+
852
+ class Meta :
853
+ model = Article
854
+ interfaces = (Node ,)
855
+ filterset_class = NewArticleFilter
856
+
857
+ def resolve_viewer (self , info ):
858
+ return self .reporter
859
+
860
+ class Query (ObjectType ):
861
+ all_articles = DjangoFilterConnectionField (NewArticleFilterNode )
862
+
863
+ reporter_1 = Reporter .objects .create (
864
+ first_name = "John" ,
last_name = "Doe" ,
email = "[email protected] "
865
+ )
866
+
867
+ article_1 = Article .objects .create (
868
+ headline = "Hello" ,
869
+ reporter = reporter_1 ,
870
+ editor = reporter_1 ,
871
+ pub_date = datetime .now (),
872
+ pub_date_time = datetime .now (),
873
+ )
874
+
875
+ reporter_2 = Reporter .objects .create (
876
+ first_name = "Adam" ,
last_name = "Doe" ,
email = "[email protected] "
877
+ )
878
+
879
+ article_2 = Article .objects .create (
880
+ headline = "Good Bye" ,
881
+ reporter = reporter_2 ,
882
+ editor = reporter_2 ,
883
+ pub_date = datetime .now (),
884
+ pub_date_time = datetime .now (),
885
+ )
886
+
887
+ schema = Schema (query = Query )
888
+
889
+ query = (
890
+ """
891
+ query NodeFilteringQuery {
892
+ allArticles(viewer_Email_In: "%s") {
893
+ edges {
894
+ node {
895
+ headline
896
+ viewer {
897
+ email
898
+ }
899
+ }
900
+ }
901
+ }
902
+ }
903
+ """
904
+ % reporter_1 .email
905
+ )
906
+
907
+ expected = {
908
+ "allArticles" : {
909
+ "edges" : [
910
+ {
911
+ "node" : {
912
+ "headline" : article_1 .headline ,
913
+ "viewer" : {"email" : reporter_1 .email },
914
+ }
915
+ }
916
+ ]
917
+ }
918
+ }
919
+
920
+ result = schema .execute (query )
921
+
922
+ assert not result .errors
923
+ assert result .data == expected
0 commit comments