Skip to content

Instantly share code, notes, and snippets.

@haplo
Created May 14, 2012 18:52

Revisions

  1. Fidel Ramos revised this gist May 14, 2012. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions admin.py
    Original file line number Diff line number Diff line change
    @@ -10,6 +10,9 @@ class ConcreteBlankFilter(BlankFilter):
    title = "some title"
    parameter_name = "model_field_name"
    This has been inspired (read "almost an exact copy of") this solution
    at StackOverflow: http://stackoverflow.com/a/9593302/519510
    """
    title = ''
    parameter_name = ''
  2. Fidel Ramos created this gist May 14, 2012.
    41 changes: 41 additions & 0 deletions admin.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,41 @@
    from django.contrib import admin


    class BlankFilter(admin.SimpleListFilter):
    """Abstract base class for filtering blank fields.
    To use define a subclass that defines title and parameter_name fields:
    class ConcreteBlankFilter(BlankFilter):
    title = "some title"
    parameter_name = "model_field_name"
    """
    title = ''
    parameter_name = ''

    def lookups(self, request, model_admin):
    return (
    ('1', _('Has value'), ),
    ('0', _('Empty value'), ),
    )

    def queryset(self, request, queryset):
    kwargs = {
    unicode(self.parameter_name): '',
    }
    if self.value() == '0':
    return queryset.filter(**kwargs)
    if self.value() == '1':
    return queryset.exclude(**kwargs)
    return queryset


    class ConcreteBlankFilter(BlankFilter):
    title = "this filter is usable in "
    parameter_name = "model_field_name" # model_field_name should correspond to
    # a field with blank=True


    class SomeModelAdmin(admin.ModelAdmin):
    list_filter = [ConcreteBlankFilter]