﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
8330	Cannot add new filterspecs without modifining filterspecs.py	elwaywitvac <elwaywitvac@…>	nobody	"Adding your own filter specs works easily by simply using this code within an applications admin.py
{{{
#!python
from django.contrib.admin.filterspecs import FilterSpec

class MyFilterSpec(FilterSpec):
...

FilterSpec.register(...)
}}}

However, since the last default FilterSpec is always evaluated as True, and new FilterSpec's never get tested.  It doesn't seem right to require a library file be modified in order to add a a feature to an application (for example, django-tagging which is what I was messing with when I found this.)

Since I don't know exactly what channels I should be going through to submit this as a patch, I'll just put the solution I found here.  It's easy to fix if you add the following the FilterSpec.

{{{
#!python
class FilterSpec(object):
    filter_specs = []
    default = None  #added
...
    def create(cls, f, request, params, model, model_admin):
        for test, factory in cls.filter_specs:
            if test(f):
                return factory(f, request, params, model, model_admin)
        ### added after this point
        if callable(default):
            return default(f, request, params, model, model_admin)
    create = classmethod(create)

    # new method
    def set_default(cls, factory):
	if callable(factory):
		cls.default = factory
    set_default = classmethod(set_default)
}}}

Then, just replace the last line (which registers AllValuesFilterSpec) with:
{{{
#!python
FilterSpec.set_default(AllValuesFilterSpec)
}}}"		closed	contrib.admin	dev		duplicate	Filters		Unreviewed	1	0	0	0	0	0
