Skip to content
Generic Filters for the changelist in Django Admin
Branch: master
Clone or download
Pull request Compare This branch is 3 commits behind samastur:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Django Admin Filters

Allows you to use generic filters for the admin changelist view.



	from adminfilters.admin import GenericFilterAdmin
	import string
	class MyAdmin(GenericFilterAdmin):
		generic_filters = ('alphabetic_filter',)
	    def alphabetic_filter(self, request, cl):
	        Creates an alphabetic filter for the 'name' field on the model
	        registered to this admin
	        if self.model.objects.all().count():
	            selected = request.GET.get('name__istartswith', None)
	            choices = [(selected is None,
	                   cl.get_query_string({}, ['name__istartswith']),
	            for letter in string.ascii_lowercase:
	                if self.model.objects.filter(name__istartswith=letter).count():
	                    choices.append((selected == letter,
	                           cl.get_query_string({'name__istartswith': letter}),
	            return cl.build_filter_spec(choices, 'alphabetic')
	        return False
Generic Filters Property

The ``generic_filters`` property on a ``GenericFilterAdmin`` subclass defines a
sequence of filter methods on the same class. 
Filter Methods

A filter method takes a ``HttpRequest`` object and a ``GenericFilterChangeList``
object as arguments. It returns either False if this filter has no output for 
the given request and/or environment or a ``FilterSpec`` object.


This method takes two arguments. A sequence or callable defining the available
choices and a title to be used for the filter spec. It returns a ``FilterSpec``
object. This is a helper method to quickly build ``FilterSpec`` objects without
actually writing a ``FilterSpec`` subclass.

If a callable is given as first argument, it should return a sequence when

The sequence should contain 3-item sequences like this:

 * A boolean object whether this option is currently selected or not.
 * A query string to be used to activate this filter
 * A string to be displayed as the choices' label.


This method takes two arguments. A dictionary of key-value pairs to be *added*
to the query string and optionally a sequence of keys to be *removed* from the
query string. It returns a query string. 
You can’t perform that action at this time.