diff options
| author | Anssi Kääriäinen <akaariai@gmail.com> | 2013-11-21 14:11:57 +0200 |
|---|---|---|
| committer | Anssi Kääriäinen <akaariai@gmail.com> | 2013-11-21 14:52:00 +0200 |
| commit | 752d3d70da6291039f33781a0a2ef6f3b7c5fcb5 (patch) | |
| tree | c86d12d2ca9e1473caf84f66b9e81e0b28f9a06c | |
| parent | 1116a5662c1648ea3a80acc4b9a3929778bb4036 (diff) | |
Fixed #21431 -- GenRel->FK list_filter regression in admin
Report, analysis and tests from stephenmcd.
| -rw-r--r-- | django/contrib/admin/utils.py | 6 | ||||
| -rw-r--r-- | tests/admin_views/tests.py | 18 |
2 files changed, 20 insertions, 4 deletions
diff --git a/django/contrib/admin/utils.py b/django/contrib/admin/utils.py index 82f6c42721..191e18fcf8 100644 --- a/django/contrib/admin/utils.py +++ b/django/contrib/admin/utils.py @@ -389,10 +389,8 @@ class NotRelationField(Exception): def get_model_from_relation(field): - if isinstance(field, models.related.RelatedObject): - return field.model - elif getattr(field, 'rel'): # or isinstance? - return field.rel.to + if hasattr(field, 'get_path_info'): + return field.get_path_info()[-1].to_opts.model else: raise NotRelationField diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index f23d8d1960..77df3651f7 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -18,6 +18,7 @@ from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME from django.contrib.admin.models import LogEntry, DELETION from django.contrib.admin.sites import LOGIN_FORM_KEY from django.contrib.admin.utils import quote +from django.contrib.admin.validation import ModelAdminValidator from django.contrib.admin.views.main import IS_POPUP_VAR from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase from django.contrib.auth import REDIRECT_FIELD_NAME @@ -4682,3 +4683,20 @@ class InlineAdminViewOnSiteTest(TestCase): self.assertContains(response, '"/worker_inline/%s/%s/"' % (worker.surname, worker.name), ) + + +class AdminGenericRelationTests(TestCase): + def test_generic_relation_fk_list_filter(self): + """ + Validates a model with a generic relation to a model with + a foreign key can specify the generic+fk relationship + path as a list_filter. See trac #21428. + """ + class GenericFKAdmin(ModelAdmin): + list_filter = ('tags__content_type',) + + validator = ModelAdminValidator() + try: + validator.validate_list_filter(GenericFKAdmin, Plot) + except ImproperlyConfigured: + self.fail("Couldn't validate a GenericRelation -> FK path in ModelAdmin.list_filter") |
