diff --git a/awx/main/filters.py b/awx/main/filters.py index 3191107725..ef1ca37b4a 100644 --- a/awx/main/filters.py +++ b/awx/main/filters.py @@ -61,6 +61,7 @@ class FieldLookupBackend(BaseFilterBackend): return field def to_python_boolean(self, value, allow_none=False): + value = unicode(value) if value.lower() in ('true', '1'): return True elif value.lower() in ('false', '0'): @@ -71,6 +72,7 @@ class FieldLookupBackend(BaseFilterBackend): raise ValueError(u'Unable to convert "%s" to boolean' % unicode(value)) def to_python_related(self, value): + value = unicode(value) if value.lower() in ('none', 'null'): return None else: diff --git a/awx/main/tests/users.py b/awx/main/tests/users.py index 385b8d6932..3a6f9dc492 100644 --- a/awx/main/tests/users.py +++ b/awx/main/tests/users.py @@ -406,6 +406,12 @@ class UsersTest(BaseTest): url = '%s?is_superuser=notatbool' % base_url self.check_get_list(url, self.super_django_user, base_qs, expect=400) + # Filter by custom __int suffix on boolean field. + url = '%s?is_superuser__int=1' % base_url + qs = base_qs.filter(is_superuser=True) + self.assertTrue(qs.count()) + self.check_get_list(url, self.super_django_user, qs) + # Filter by is_staff (field not exposed via API). FIXME: Should # eventually not be allowed! url = '%s?is_staff=true' % base_url