Ticket #5833: ticket-5833-against-newforms-admin-6477.diff
| File ticket-5833-against-newforms-admin-6477.diff, 3.6 kB (added by Honza_Kral, 2 years ago) |
|---|
-
a/django/contrib/admin/filterspecs.py
old new 19 19 self.field_path = field_path or f.name 20 20 21 21 def register(cls, test, factory): 22 cls.filter_specs. append((test, factory))22 cls.filter_specs.insert(0, (test, factory)) 23 23 register = classmethod(register) 24 24 25 25 def create(cls, f, request, params, model, model_admin, field_path=None): … … 77 77 'query_string': cl.get_query_string({self.lookup_kwarg: pk_val}), 78 78 'display': val} 79 79 80 FilterSpec.register(lambda f: bool(f.rel), RelatedFilterSpec)81 82 80 class ChoicesFilterSpec(FilterSpec): 83 81 def __init__(self, f, request, params, model, model_admin, field_path=None): 84 82 super(ChoicesFilterSpec, self).__init__(f, request, params, model, model_admin, field_path=field_path) … … 94 92 'query_string': cl.get_query_string({self.lookup_kwarg: k}), 95 93 'display': v} 96 94 97 FilterSpec.register(lambda f: bool(f.choices), ChoicesFilterSpec)98 99 95 class DateFieldFilterSpec(FilterSpec): 100 96 def __init__(self, f, request, params, model, model_admin, field_path=None): 101 97 super(DateFieldFilterSpec, self).__init__(f, request, params, model, model_admin, field_path=field_path) … … 129 125 'query_string': cl.get_query_string(param_dict, [self.field_generic]), 130 126 'display': title} 131 127 132 FilterSpec.register(lambda f: isinstance(f, models.DateField), DateFieldFilterSpec)133 134 128 class BooleanFieldFilterSpec(FilterSpec): 135 129 def __init__(self, f, request, params, model, model_admin, field_path=None): 136 130 super(BooleanFieldFilterSpec, self).__init__(f, request, params, model, model_admin, field_path=field_path) … … 152 146 'query_string': cl.get_query_string({self.lookup_kwarg2: 'True'}, [self.lookup_kwarg]), 153 147 'display': _('Unknown')} 154 148 155 FilterSpec.register(lambda f: isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField), BooleanFieldFilterSpec)156 157 # This should be registered last, because it's a last resort. For example,158 # if a field is eligible to use the BooleanFieldFilterSpec, that'd be much159 # more appropriate, and the AllValuesFilterSpec won't get used for it.160 149 class AllValuesFilterSpec(FilterSpec): 161 150 def __init__(self, f, request, params, model, model_admin, field_path=None): 162 151 super(AllValuesFilterSpec, self).__init__(f, request, params, model, model_admin, field_path=field_path) … … 176 165 yield {'selected': self.lookup_val == val, 177 166 'query_string': cl.get_query_string({self.field_path: val}), 178 167 'display': val} 168 169 # This should be registered first, because it's a last resort. For example, 170 # if a field is eligible to use the BooleanFieldFilterSpec, that'd be much 171 # more appropriate, and the AllValuesFilterSpec won't get used for it. 179 172 FilterSpec.register(lambda f: True, AllValuesFilterSpec) 173 FilterSpec.register(lambda f: isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField), BooleanFieldFilterSpec) 174 FilterSpec.register(lambda f: isinstance(f, models.DateField), DateFieldFilterSpec) 175 FilterSpec.register(lambda f: bool(f.choices), ChoicesFilterSpec) 176 FilterSpec.register(lambda f: bool(f.rel), RelatedFilterSpec)
