I have a simple Django model like:
class Person(models.Model):
referrer = models.ForeignKey(\'self\', null=True)
...
In this model\
I have a simpler version of frnhr's answer, which actually filters on __isnull condition.
(Django 1.4+):
from django.contrib.admin import SimpleListFilter
class NullListFilter(SimpleListFilter):
def lookups(self, request, model_admin):
return (
('1', 'Null', ),
('0', '!= Null', ),
)
def queryset(self, request, queryset):
if self.value() in ('0', '1'):
kwargs = { '{0}__isnull'.format(self.parameter_name) : self.value() == '1' }
return queryset.filter(**kwargs)
return queryset
Then also:
class StartNullListFilter(NullListFilter):
title = u'Started'
parameter_name = u'started'
and finally:
class SomeModelAdmin(admin.ModelAdmin):
list_filter = (StartNullListFilter, )
I personally don't like to trash my admin.py with dozens of classes, so I came up with such a helper function:
def null_filter(field, title_=None):
class NullListFieldFilter(NullListFilter):
parameter_name = field
title = title_ or parameter_name
return NullListFieldFilter
Which I can later apply as in:
class OtherModelAdmin(admin.ModelAdmin):
list_filter = (null_filter('somefield'), null_filter('ugly_field', _('Beautiful Name')), )