@@ -238,12 +238,21 @@ class ExplicitLookupsPersonDateFilter(FilterSet):
238238 class Meta :
239239 model = Person
240240
241- class InSetLookupPersonFilter (FilterSet ):
241+
242+ class InSetLookupPersonIDFilter (FilterSet ):
242243 pk = AllLookupsFilter ('id' )
243244
244245 class Meta :
245246 model = Person
246247
248+
249+ class InSetLookupPersonNameFilter (FilterSet ):
250+ name = AllLookupsFilter ('name' )
251+
252+ class Meta :
253+ model = Person
254+
255+
247256class TestFilterSets (TestCase ):
248257
249258 if django .VERSION >= (1 , 8 ):
@@ -679,14 +688,14 @@ class Meta:
679688 p = list (f )[0 ]
680689 self .assertEqual (p .name , "John" )
681690
682- def test_inset_filter (self ):
691+ def test_inset_number_filter (self ):
683692 p1 = Person .objects .get (name = "John" ).pk
684693 p2 = Person .objects .get (name = "Mark" ).pk
685694
686695 ALL_GET = {
687696 'pk__in' : '{:d},{:d}' .format (p1 , p2 ),
688697 }
689- f = InSetLookupPersonFilter (ALL_GET , queryset = Person .objects .all ())
698+ f = InSetLookupPersonIDFilter (ALL_GET , queryset = Person .objects .all ())
690699 f = [x .pk for x in f ]
691700 self .assertEqual (len (f ), 2 )
692701 self .assertIn (p1 , f )
@@ -696,13 +705,13 @@ def test_inset_filter(self):
696705 INVALID_GET = {
697706 'pk__in' : '{:d},c{:d}' .format (p1 , p2 )
698707 }
699- f = InSetLookupPersonFilter (INVALID_GET , queryset = Person .objects .all ())
708+ f = InSetLookupPersonIDFilter (INVALID_GET , queryset = Person .objects .all ())
700709 self .assertEqual (len (list (f )), 0 )
701710
702711 EXTRA_GET = {
703712 'pk__in' : '{:d},{:d},{:d}' .format (p1 , p2 , p1 * p2 )
704713 }
705- f = InSetLookupPersonFilter (EXTRA_GET , queryset = Person .objects .all ())
714+ f = InSetLookupPersonIDFilter (EXTRA_GET , queryset = Person .objects .all ())
706715 f = [x .pk for x in f ]
707716 self .assertEqual (len (f ), 2 )
708717 self .assertIn (p1 , f )
@@ -711,8 +720,45 @@ def test_inset_filter(self):
711720 DISORDERED_GET = {
712721 'pk__in' : '{:d},{:d},{:d}' .format (p2 , p2 * p1 , p1 )
713722 }
714- f = InSetLookupPersonFilter (DISORDERED_GET , queryset = Person .objects .all ())
723+ f = InSetLookupPersonIDFilter (DISORDERED_GET , queryset = Person .objects .all ())
715724 f = [x .pk for x in f ]
716725 self .assertEqual (len (f ), 2 )
717726 self .assertIn (p1 , f )
718727 self .assertIn (p2 , f )
728+
729+ def test_inset_char_filter (self ):
730+ p1 = Person .objects .get (name = "John" ).name
731+ p2 = Person .objects .get (name = "Mark" ).name
732+
733+ ALL_GET = {
734+ 'name__in' : '{},{}' .format (p1 , p2 ),
735+ }
736+ f = InSetLookupPersonNameFilter (ALL_GET , queryset = Person .objects .all ())
737+ f = [x .name for x in f ]
738+ self .assertEqual (len (f ), 2 )
739+ self .assertIn (p1 , f )
740+ self .assertIn (p2 , f )
741+
742+ NONEXISTENT_GET = {
743+ 'name__in' : '{},Foo{}' .format (p1 , p2 )
744+ }
745+ f = InSetLookupPersonNameFilter (NONEXISTENT_GET , queryset = Person .objects .all ())
746+ self .assertEqual (len (list (f )), 1 )
747+
748+ EXTRA_GET = {
749+ 'name__in' : '{},{},{}' .format (p1 , p2 , p1 + p2 )
750+ }
751+ f = InSetLookupPersonNameFilter (EXTRA_GET , queryset = Person .objects .all ())
752+ f = [x .name for x in f ]
753+ self .assertEqual (len (f ), 2 )
754+ self .assertIn (p1 , f )
755+ self .assertIn (p2 , f )
756+
757+ DISORDERED_GET = {
758+ 'name__in' : '{},{},{}' .format (p2 , p2 + p1 , p1 )
759+ }
760+ f = InSetLookupPersonNameFilter (DISORDERED_GET , queryset = Person .objects .all ())
761+ f = [x .name for x in f ]
762+ self .assertEqual (len (f ), 2 )
763+ self .assertIn (p1 , f )
764+ self .assertIn (p2 , f )
0 commit comments