Ein anderer Ansatz mit einem generischen isempty
Lookup, das mit jedem Feld verwendet werden kann.
Es kann auch von django rest_framework oder anderen Anwendungen verwendet werden, die django lookups verwenden:
from distutils.util import strtobool
from django.db.models import Field
from django.db.models.lookups import BuiltinLookup
@Field.register_lookup
class IsEmpty(BuiltinLookup):
lookup_name = 'isempty'
prepare_rhs = False
def as_sql(self, compiler, connection):
sql, params = compiler.compile(self.lhs)
condition = self.rhs if isinstance(self.rhs, bool) else bool(strtobool(self.rhs))
if condition:
return "%s IS NULL or %s = ''" % (sql, sql), params
else:
return "%s <> ''" % sql, params
Sie können es dann wie folgt verwenden:
Name.objects.filter(alias__isempty=False)