11539 empty lookup handle non boolean params

This commit is contained in:
Arthur 2023-01-20 14:27:03 -08:00
parent d5e6829eff
commit 10b8904481

View File

@ -1,3 +1,4 @@
from distutils.util import strtobool
from django.db.models import CharField, Lookup
@ -7,11 +8,21 @@ class Empty(Lookup):
"""
lookup_name = 'empty'
def convert_parm_to_bool(self, param):
try:
ret = str(strtobool(param))
except ValueError:
ret = "false"
return ret
def as_sql(self, qn, connection):
lhs, lhs_params = self.process_lhs(qn, connection)
rhs, rhs_params = self.process_rhs(qn, connection)
rhs_params = [str(self.convert_parm_to_bool(param)) for param in rhs_params]
params = lhs_params + rhs_params
return 'CAST(LENGTH(%s) AS BOOLEAN) != %s' % (lhs, rhs), params
s = f'CAST(LENGTH({lhs}) AS BOOLEAN) != {rhs}'
return (s, params)
CharField.register_lookup(Empty)