@@ -645,6 +645,48 @@ def test_must_call_distinct(self):
645
645
)
646
646
647
647
648
+ class Blog (models .Model ):
649
+ name = models .CharField (max_length = 20 )
650
+
651
+
652
+ class Entry (models .Model ):
653
+ blog = models .ForeignKey (Blog , on_delete = models .CASCADE )
654
+ headline = models .CharField (max_length = 120 )
655
+ pub_date = models .DateField (null = True )
656
+
657
+
658
+ class BlogSerializer (serializers .ModelSerializer ):
659
+ class Meta :
660
+ model = Blog
661
+ fields = '__all__'
662
+
663
+
664
+ class SearchFilterToManyTests (TestCase ):
665
+
666
+ @classmethod
667
+ def setUpTestData (cls ):
668
+ b1 = Blog .objects .create (name = 'Blog 1' )
669
+ b2 = Blog .objects .create (name = 'Blog 2' )
670
+
671
+ Entry .objects .create (blog = b1 , headline = 'Something about Lennon' , pub_date = datetime .date (1979 , 1 , 1 ))
672
+ Entry .objects .create (blog = b1 , headline = 'Another thing about Lennon' , pub_date = datetime .date (1979 , 6 , 1 ))
673
+
674
+ Entry .objects .create (blog = b2 , headline = 'Something unrelated' , pub_date = datetime .date (1979 , 1 , 1 ))
675
+ Entry .objects .create (blog = b2 , headline = 'Retrospective on Lennon' , pub_date = datetime .date (1990 , 6 , 1 ))
676
+
677
+ def test_multiple_filter_conditions (self ):
678
+ class SearchListView (generics .ListAPIView ):
679
+ queryset = Blog .objects .all ()
680
+ serializer_class = BlogSerializer
681
+ filter_backends = (filters .SearchFilter ,)
682
+ search_fields = ('=name' , 'entry__headline' , '=entry__pub_date__year' )
683
+
684
+ view = SearchListView .as_view ()
685
+ request = factory .get ('/' , {'search' : 'Lennon,1979' })
686
+ response = view (request )
687
+ assert len (response .data ) == 1
688
+
689
+
648
690
class OrderingFilterModel (models .Model ):
649
691
title = models .CharField (max_length = 20 , verbose_name = 'verbose title' )
650
692
text = models .CharField (max_length = 100 )
0 commit comments