home / django_tickets / tickets

tickets: 8330

This data as json

id created changetime last_pulled_from_trac stage status component type severity version resolution summary description owner reporter keywords easy has_patch needs_better_patch needs_tests needs_docs ui_ux
8330 2008-08-15 02:40:10 2008-08-15 02:45:29 2022-03-06 03:41:58.059140 Unreviewed closed contrib.admin     dev duplicate Cannot add new filterspecs without modifining filterspecs.py 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) }}} nobody elwaywitvac <elwaywitvac@gmail.com> Filters 0 1 0 0 0 0
Powered by Datasette · Queries took 0.754ms