commit f633894afc1757911cb38a26e80fe3b16ca74710
Author: Honza Král <Honza.Kral@gmail.com>
Date:   Mon Jan 28 22:15:20 2008 +0100

    newforms-admin enable registering custom FilterSpecs
    
    http://code.djangoproject.com/ticket/5833

diff --git a/django/contrib/admin/filterspecs.py b/django/contrib/admin/filterspecs.py
index d6a4a0b..6fcd400 100644
--- a/django/contrib/admin/filterspecs.py
+++ b/django/contrib/admin/filterspecs.py
@@ -20,7 +20,7 @@ class FilterSpec(object):
         self.params = params
 
     def register(cls, test, factory):
-        cls.filter_specs.append((test, factory))
+        cls.filter_specs.insert(0, (test, factory))
     register = classmethod(register)
 
     def create(cls, f, request, params, model, model_admin):
@@ -78,8 +78,6 @@ class RelatedFilterSpec(FilterSpec):
                    'query_string': cl.get_query_string({self.lookup_kwarg: pk_val}),
                    'display': val}
 
-FilterSpec.register(lambda f: bool(f.rel), RelatedFilterSpec)
-
 class ChoicesFilterSpec(FilterSpec):
     def __init__(self, f, request, params, model, model_admin):
         super(ChoicesFilterSpec, self).__init__(f, request, params, model, model_admin)
@@ -95,8 +93,6 @@ class ChoicesFilterSpec(FilterSpec):
                     'query_string': cl.get_query_string({self.lookup_kwarg: k}),
                     'display': v}
 
-FilterSpec.register(lambda f: bool(f.choices), ChoicesFilterSpec)
-
 class DateFieldFilterSpec(FilterSpec):
     def __init__(self, f, request, params, model, model_admin):
         super(DateFieldFilterSpec, self).__init__(f, request, params, model, model_admin)
@@ -130,8 +126,6 @@ class DateFieldFilterSpec(FilterSpec):
                    'query_string': cl.get_query_string(param_dict, [self.field_generic]),
                    'display': title}
 
-FilterSpec.register(lambda f: isinstance(f, models.DateField), DateFieldFilterSpec)
-
 class BooleanFieldFilterSpec(FilterSpec):
     def __init__(self, f, request, params, model, model_admin):
         super(BooleanFieldFilterSpec, self).__init__(f, request, params, model, model_admin)
@@ -153,11 +147,6 @@ class BooleanFieldFilterSpec(FilterSpec):
                    'query_string': cl.get_query_string({self.lookup_kwarg2: 'True'}, [self.lookup_kwarg]),
                    'display': _('Unknown')}
 
-FilterSpec.register(lambda f: isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField), BooleanFieldFilterSpec)
-
-# This should be registered last, because it's a last resort. For example,
-# if a field is eligible to use the BooleanFieldFilterSpec, that'd be much
-# more appropriate, and the AllValuesFilterSpec won't get used for it.
 class AllValuesFilterSpec(FilterSpec):
     def __init__(self, f, request, params, model, model_admin):
         super(AllValuesFilterSpec, self).__init__(f, request, params, model, model_admin)
@@ -176,4 +165,12 @@ class AllValuesFilterSpec(FilterSpec):
             yield {'selected': self.lookup_val == val,
                    'query_string': cl.get_query_string({self.field.name: val}),
                    'display': val}
+
+# This should be registered first, because it's a last resort. For example,
+# if a field is eligible to use the BooleanFieldFilterSpec, that'd be much
+# more appropriate, and the AllValuesFilterSpec won't get used for it.
 FilterSpec.register(lambda f: True, AllValuesFilterSpec)
+FilterSpec.register(lambda f: isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField), BooleanFieldFilterSpec)
+FilterSpec.register(lambda f: isinstance(f, models.DateField), DateFieldFilterSpec)
+FilterSpec.register(lambda f: bool(f.choices), ChoicesFilterSpec)
+FilterSpec.register(lambda f: bool(f.rel), RelatedFilterSpec)
