Custom Filter in Django Admin on Django 1.3 or below Custom Filter in Django Admin on Django 1.3 or below python python

Custom Filter in Django Admin on Django 1.3 or below


Thanks to gpilotino for giving me the push into the right direction for implementing this.

I noticed the question's code is using a datetime to figure out when its live . So I used the DateFieldFilterSpec and subclassed it.

from django.db import modelsfrom django.contrib.admin.filterspecs import FilterSpec, ChoicesFilterSpec,DateFieldFilterSpecfrom django.utils.encoding import smart_unicodefrom django.utils.translation import ugettext as _from datetime import datetimeclass IsLiveFilterSpec(DateFieldFilterSpec):    """    Adds filtering by future and previous values in the admin    filter sidebar. Set the is_live_filter filter in the model field attribute    'is_live_filter'.    my_model_field.is_live_filter = True    """    def __init__(self, f, request, params, model, model_admin):        super(IsLiveFilterSpec, self).__init__(f, request, params, model,                                               model_admin)        today = datetime.now()        self.links = (            (_('Any'), {}),            (_('Yes'), {'%s__lte' % self.field.name: str(today),                       }),            (_('No'), {'%s__gte' % self.field.name: str(today),                    }),        )    def title(self):        return "Is Live"# registering the filterFilterSpec.filter_specs.insert(0, (lambda f: getattr(f, 'is_live_filter', False),                               IsLiveFilterSpec))

To use you can put the above code into a filters.py, and import it in the model you want to add the filter to


you have to write a custom FilterSpec (not documentend anywhere).Look here for an example:

http://www.djangosnippets.org/snippets/1051/