@@ -1615,6 +1615,7 @@ def setUpTestData(cls):
1615
1615
'cf11' : manufacturers [2 ].pk ,
1616
1616
'cf12' : [manufacturers [2 ].pk , manufacturers [3 ].pk ],
1617
1617
}),
1618
+ Site (name = 'Site 4' , slug = 'site-4' ),
1618
1619
])
1619
1620
1620
1621
def test_filter_integer (self ):
@@ -1624,6 +1625,7 @@ def test_filter_integer(self):
1624
1625
self .assertEqual (self .filterset ({'cf_cf1__gte' : [200 ]}, self .queryset ).qs .count (), 2 )
1625
1626
self .assertEqual (self .filterset ({'cf_cf1__lt' : [200 ]}, self .queryset ).qs .count (), 1 )
1626
1627
self .assertEqual (self .filterset ({'cf_cf1__lte' : [200 ]}, self .queryset ).qs .count (), 2 )
1628
+ self .assertEqual (self .filterset ({'cf_cf1__empty' : True }, self .queryset ).qs .count (), 1 )
1627
1629
1628
1630
def test_filter_decimal (self ):
1629
1631
self .assertEqual (self .filterset ({'cf_cf2' : [100.1 , 200.2 ]}, self .queryset ).qs .count (), 2 )
@@ -1632,6 +1634,7 @@ def test_filter_decimal(self):
1632
1634
self .assertEqual (self .filterset ({'cf_cf2__gte' : [200.2 ]}, self .queryset ).qs .count (), 2 )
1633
1635
self .assertEqual (self .filterset ({'cf_cf2__lt' : [200.2 ]}, self .queryset ).qs .count (), 1 )
1634
1636
self .assertEqual (self .filterset ({'cf_cf2__lte' : [200.2 ]}, self .queryset ).qs .count (), 2 )
1637
+ self .assertEqual (self .filterset ({'cf_cf2__empty' : True }, self .queryset ).qs .count (), 1 )
1635
1638
1636
1639
def test_filter_boolean (self ):
1637
1640
self .assertEqual (self .filterset ({'cf_cf3' : True }, self .queryset ).qs .count (), 2 )
@@ -1648,6 +1651,7 @@ def test_filter_text_strict(self):
1648
1651
self .assertEqual (self .filterset ({'cf_cf4__niew' : ['bar' ]}, self .queryset ).qs .count (), 1 )
1649
1652
self .assertEqual (self .filterset ({'cf_cf4__ie' : ['FOO' ]}, self .queryset ).qs .count (), 1 )
1650
1653
self .assertEqual (self .filterset ({'cf_cf4__nie' : ['FOO' ]}, self .queryset ).qs .count (), 2 )
1654
+ self .assertEqual (self .filterset ({'cf_cf4__empty' : True }, self .queryset ).qs .count (), 1 )
1651
1655
1652
1656
def test_filter_text_loose (self ):
1653
1657
self .assertEqual (self .filterset ({'cf_cf5' : ['foo' ]}, self .queryset ).qs .count (), 2 )
@@ -1659,6 +1663,7 @@ def test_filter_date(self):
1659
1663
self .assertEqual (self .filterset ({'cf_cf6__gte' : ['2016-06-27' ]}, self .queryset ).qs .count (), 2 )
1660
1664
self .assertEqual (self .filterset ({'cf_cf6__lt' : ['2016-06-27' ]}, self .queryset ).qs .count (), 1 )
1661
1665
self .assertEqual (self .filterset ({'cf_cf6__lte' : ['2016-06-27' ]}, self .queryset ).qs .count (), 2 )
1666
+ self .assertEqual (self .filterset ({'cf_cf6__empty' : True }, self .queryset ).qs .count (), 1 )
1662
1667
1663
1668
def test_filter_url_strict (self ):
1664
1669
self .assertEqual (
@@ -1674,24 +1679,28 @@ def test_filter_url_strict(self):
1674
1679
self .assertEqual (self .filterset ({'cf_cf7__niew' : ['.com' ]}, self .queryset ).qs .count (), 0 )
1675
1680
self .assertEqual (self .filterset ({'cf_cf7__ie' : ['HTTP://A.EXAMPLE.COM' ]}, self .queryset ).qs .count (), 1 )
1676
1681
self .assertEqual (self .filterset ({'cf_cf7__nie' : ['HTTP://A.EXAMPLE.COM' ]}, self .queryset ).qs .count (), 2 )
1682
+ self .assertEqual (self .filterset ({'cf_cf7__empty' : True }, self .queryset ).qs .count (), 1 )
1677
1683
1678
1684
def test_filter_url_loose (self ):
1679
1685
self .assertEqual (self .filterset ({'cf_cf8' : ['example.com' ]}, self .queryset ).qs .count (), 3 )
1680
1686
1681
1687
def test_filter_select (self ):
1682
1688
self .assertEqual (self .filterset ({'cf_cf9' : ['A' , 'B' ]}, self .queryset ).qs .count (), 2 )
1689
+ self .assertEqual (self .filterset ({'cf_cf9__empty' : True }, self .queryset ).qs .count (), 1 )
1683
1690
1684
1691
def test_filter_multiselect (self ):
1685
1692
self .assertEqual (self .filterset ({'cf_cf10' : ['A' ]}, self .queryset ).qs .count (), 1 )
1686
1693
self .assertEqual (self .filterset ({'cf_cf10' : ['A' , 'C' ]}, self .queryset ).qs .count (), 2 )
1687
- self .assertEqual (self .filterset ({'cf_cf10' : ['null' ]}, self .queryset ).qs .count (), 1 )
1694
+ self .assertEqual (self .filterset ({'cf_cf10' : ['null' ]}, self .queryset ).qs .count (), 1 ) # Contains a literal null
1695
+ self .assertEqual (self .filterset ({'cf_cf10__empty' : True }, self .queryset ).qs .count (), 2 )
1688
1696
1689
1697
def test_filter_object (self ):
1690
1698
manufacturer_ids = Manufacturer .objects .values_list ('id' , flat = True )
1691
1699
self .assertEqual (
1692
1700
self .filterset ({'cf_cf11' : [manufacturer_ids [0 ], manufacturer_ids [1 ]]}, self .queryset ).qs .count (),
1693
1701
2
1694
1702
)
1703
+ self .assertEqual (self .filterset ({'cf_cf11__empty' : True }, self .queryset ).qs .count (), 1 )
1695
1704
1696
1705
def test_filter_multiobject (self ):
1697
1706
manufacturer_ids = Manufacturer .objects .values_list ('id' , flat = True )
@@ -1703,3 +1712,4 @@ def test_filter_multiobject(self):
1703
1712
self .filterset ({'cf_cf12' : [manufacturer_ids [3 ]]}, self .queryset ).qs .count (),
1704
1713
3
1705
1714
)
1715
+ self .assertEqual (self .filterset ({'cf_cf12__empty' : True }, self .queryset ).qs .count (), 1 )
0 commit comments