From e5b0f5b95d49c33f5431cf4060705b5e59ec69d4 Mon Sep 17 00:00:00 2001 From: tschilling Date: Wed, 25 Sep 2013 17:00:51 -0400 Subject: [PATCH] [1.6.x] Fixed #21129 -- Prevented admin filter params modifications from throwing an exception. Thanks Tuttle for the report. Backport of 5381317fe3 from master --- django/contrib/admin/options.py | 4 ++++ tests/modeladmin/tests.py | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 8c88506a15..a841ee30b9 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -306,6 +306,10 @@ class BaseModelAdmin(six.with_metaclass(RenameBaseModelAdminMethods)): # later. return True 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 rel_name = field.rel.get_related_field().name elif isinstance(field, RelatedObject): diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py index 805b57c070..ffc6219ebb 100644 --- a/tests/modeladmin/tests.py +++ b/tests/modeladmin/tests.py @@ -88,6 +88,18 @@ class ModelAdminTests(TestCase): form = ma.get_formset(None).form 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): # If we specify the fields argument, fieldsets_add and fielsets_change should # just stick the fields into a formsets structure and return it.