[1.6.x] Fixed #21129 -- Prevented admin filter params modifications from throwing an exception.

Thanks Tuttle for the report.

Backport of 5381317fe3 from master
This commit is contained in:
tschilling 2013-09-25 17:00:51 -04:00 committed by Tim Graham
parent 4290cc1d6e
commit e5b0f5b95d
2 changed files with 16 additions and 0 deletions

View File

@ -306,6 +306,10 @@ class BaseModelAdmin(six.with_metaclass(RenameBaseModelAdminMethods)):
# later. # later.
return True return True
if hasattr(field, 'rel'): if hasattr(field, 'rel'):
if field.rel is None:
# This property or relation doesn't exist, but it's allowed
# since it's ignored in ChangeList.get_filters().
return True
model = field.rel.to model = field.rel.to
rel_name = field.rel.get_related_field().name rel_name = field.rel.get_related_field().name
elif isinstance(field, RelatedObject): elif isinstance(field, RelatedObject):

View File

@ -88,6 +88,18 @@ class ModelAdminTests(TestCase):
form = ma.get_formset(None).form form = ma.get_formset(None).form
self.assertEqual(form._meta.fields, ['day', 'transport']) self.assertEqual(form._meta.fields, ['day', 'transport'])
def test_lookup_allowed_allows_nonexistent_lookup(self):
"""
Ensure that a lookup_allowed allows a parameter
whose field lookup doesn't exist.
Refs #21129.
"""
class BandAdmin(ModelAdmin):
fields = ['name']
ma = BandAdmin(Band, self.site)
self.assertTrue(ma.lookup_allowed('name__nonexistent', 'test_value'))
def test_field_arguments(self): def test_field_arguments(self):
# If we specify the fields argument, fieldsets_add and fielsets_change should # If we specify the fields argument, fieldsets_add and fielsets_change should
# just stick the fields into a formsets structure and return it. # just stick the fields into a formsets structure and return it.