summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortschilling <schillingt@better-simple.com>2013-09-25 17:00:51 -0400
committerTim Graham <timograham@gmail.com>2013-10-02 08:16:09 -0400
commit5381317fe37d50384ef9a3bf3fb6b64ff4e9215c (patch)
tree80becfacb06f13dbd88cabed9bfdaa2e23954c15
parent651bed09182cc7f2fadc54026924fd5815fc47f1 (diff)
Fixed #21129 -- Prevented admin filter params modifications from throwing an exception.
Thanks Tuttle for the report.
-rw-r--r--django/contrib/admin/options.py4
-rw-r--r--tests/modeladmin/tests.py12
2 files changed, 16 insertions, 0 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 521b2371a6..3b570c1a5f 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -348,6 +348,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 930563f5ef..f7d78677c3 100644
--- a/tests/modeladmin/tests.py
+++ b/tests/modeladmin/tests.py
@@ -95,6 +95,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.