@@ -231,6 +231,11 @@ class ExplicitLookupsPersonDateFilter(FilterSet):
231231 class Meta :
232232 model = Person
233233
234+ class InSetLookupPersonFilter (FilterSet ):
235+ pk = AllLookupsFilter ('id' )
236+
237+ class Meta :
238+ model = Person
234239
235240class TestFilterSets (TestCase ):
236241 def setUp (self ):
@@ -626,3 +631,41 @@ class Meta:
626631 self .assertEqual (len (list (f )), 1 )
627632 p = list (f )[0 ]
628633 self .assertEqual (p .name , "John" )
634+
635+ def test_inset_filter (self ):
636+ p1 = Person .objects .get (name = "John" ).pk
637+ p2 = Person .objects .get (name = "Mark" ).pk
638+
639+ ALL_GET = {
640+ 'pk__in' : u'%d,%d' % (p1 , p2 ),
641+ }
642+ f = InSetLookupPersonFilter (ALL_GET , queryset = Person .objects .all ())
643+ f = [x .pk for x in f ]
644+ self .assertEqual (len (f ), 2 )
645+ self .assertIn (p1 , f )
646+ self .assertIn (p2 , f )
647+
648+
649+ INVALID_GET = {
650+ 'pk__in' : u'%d,c%d' % (p1 , p2 )
651+ }
652+ f = InSetLookupPersonFilter (INVALID_GET , queryset = Person .objects .all ())
653+ self .assertEqual (len (list (f )), 0 )
654+
655+ EXTRA_GET = {
656+ 'pk__in' : u'%d,%d,%d' % (p1 , p2 , p1 * p2 )
657+ }
658+ f = InSetLookupPersonFilter (EXTRA_GET , queryset = Person .objects .all ())
659+ f = [x .pk for x in f ]
660+ self .assertEqual (len (f ), 2 )
661+ self .assertIn (p1 , f )
662+ self .assertIn (p2 , f )
663+
664+ DISORDERED_GET = {
665+ 'pk__in' : u'%d,%d,%d' % (p2 , p2 * p1 , p1 )
666+ }
667+ f = InSetLookupPersonFilter (DISORDERED_GET , queryset = Person .objects .all ())
668+ f = [x .pk for x in f ]
669+ self .assertEqual (len (f ), 2 )
670+ self .assertIn (p1 , f )
671+ self .assertIn (p2 , f )
0 commit comments