Merge pull request #105 from linovia/develop
Filtering against 0 returns the full queryset
This commit is contained in:
commit
7ddc3fc7d6
|
@ -63,8 +63,6 @@ class Filter(object):
|
|||
return self._field
|
||||
|
||||
def filter(self, qs, value):
|
||||
if not value:
|
||||
return qs
|
||||
if isinstance(value, (list, tuple)):
|
||||
lookup = six.text_type(value[1])
|
||||
if not lookup:
|
||||
|
@ -72,8 +70,9 @@ class Filter(object):
|
|||
value = value[0]
|
||||
else:
|
||||
lookup = self.lookup_type
|
||||
if value:
|
||||
qs = qs.filter(**{'%s__%s' % (self.name, lookup): value})
|
||||
if value in ([], (), {}, None, ''):
|
||||
return qs
|
||||
qs = qs.filter(**{'%s__%s' % (self.name, lookup): value})
|
||||
if self.distinct:
|
||||
qs = qs.distinct()
|
||||
return qs
|
||||
|
|
|
@ -31,6 +31,7 @@ from .models import Article
|
|||
from .models import Company
|
||||
from .models import Location
|
||||
from .models import Account
|
||||
from .models import BankAccount
|
||||
from .models import Profile
|
||||
from .models import Node
|
||||
from .models import DirectedNode
|
||||
|
@ -60,6 +61,32 @@ class CharFilterTests(TestCase):
|
|||
self.assertQuerysetEqual(f.qs, [b3.pk], lambda o: o.pk)
|
||||
|
||||
|
||||
class IntegerFilterTest(TestCase):
|
||||
|
||||
def test_filtering(self):
|
||||
default_values = {
|
||||
'in_good_standing': True,
|
||||
'friendly': False,
|
||||
}
|
||||
b1 = BankAccount.objects.create(amount_saved=0, **default_values)
|
||||
b2 = BankAccount.objects.create(amount_saved=3, **default_values)
|
||||
b3 = BankAccount.objects.create(amount_saved=10, **default_values)
|
||||
|
||||
class F(FilterSet):
|
||||
class Meta:
|
||||
model = BankAccount
|
||||
fields = ['amount_saved']
|
||||
|
||||
qs = BankAccount.objects.all()
|
||||
f = F(queryset=qs)
|
||||
self.assertQuerysetEqual(f.qs, [b1.pk, b2.pk, b3.pk],
|
||||
lambda o: o.pk, ordered=False)
|
||||
f = F({'amount_saved': '10'}, queryset=qs)
|
||||
self.assertQuerysetEqual(f.qs, [b3.pk], lambda o: o.pk)
|
||||
f = F({'amount_saved': '0'}, queryset=qs)
|
||||
self.assertQuerysetEqual(f.qs, [b1.pk], lambda o: o.pk)
|
||||
|
||||
|
||||
class BooleanFilterTests(TestCase):
|
||||
|
||||
def test_filtering(self):
|
||||
|
|
|
@ -309,6 +309,16 @@ class NumberFilterTests(TestCase):
|
|||
field = f.field
|
||||
self.assertIsInstance(field, forms.DecimalField)
|
||||
|
||||
def test_filtering(self):
|
||||
qs = mock.Mock(spec=['filter'])
|
||||
f = NumberFilter()
|
||||
f.filter(qs, 1)
|
||||
qs.filter.assert_called_once_with(None__exact=1)
|
||||
# Also test 0 as it once had a bug
|
||||
qs.reset_mock()
|
||||
f.filter(qs, 0)
|
||||
qs.filter.assert_called_once_with(None__exact=0)
|
||||
|
||||
|
||||
class RangeFilterTests(TestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue