I've done this for choice filters, which is (arguably) more useful:
class NullableChoiceFilter(django_filters.ChoiceFilter):
def __init__(self, **kwargs):
choices = dict(kwargs['choices'])
null_text = choices.pop(None, 'null')
kwargs['choices'] = ((None, '------'), ('null', null_text)) + tuple(choices.items())
super().__init__(**kwargs)
def filter(self, qs, value):
if value == 'null':
return super().filter(qs, Lookup(lookup_type='isnull', value=True))
else:
return super().filter(qs, value)
and then
class MyFilterSet(filters.FilterSet):
class Meta:
model = ...
@classmethod
def filter_for_lookup(cls, f, lookup_type):
if lookup_type == 'exact' and f.choices:
return NullableChoiceFilter, {'choices': f.choices}
return filters.FilterSet.filter_for_lookup(f, lookup_type)
I know this doesn't answer exactly your question, but this is the first google result for "django rest framework filter null."