Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

[1.6.x] Fixed #21431 -- GenRel->FK list_filter regression in admin

Report, analysis and tests from stephenmcd.

Backpatch of 752d3d7 from master.
  • Loading branch information...
commit 5730bf281922151f211a2509dd8b493230d6a187 1 parent 47abfa2
@akaariai akaariai authored
Showing with 22 additions and 1 deletion.
  1. +3 −1 django/contrib/admin/util.py
  2. +19 −0 tests/admin_views/tests.py
View
4 django/contrib/admin/util.py
@@ -379,7 +379,9 @@ class NotRelationField(Exception):
def get_model_from_relation(field):
- if isinstance(field, models.related.RelatedObject):
+ if hasattr(field, 'get_path_info'):
+ return field.get_path_info()[-1].to_opts.model
+ elif isinstance(field, models.related.RelatedObject):
return field.model
elif getattr(field, 'rel'): # or isinstance?
return field.rel.to
View
19 tests/admin_views/tests.py
@@ -7,6 +7,7 @@
from django.conf import settings, global_settings
from django.core import mail
+from django.core.exceptions import ImproperlyConfigured
from django.core.files import temp as tempfile
from django.core.urlresolvers import reverse
# Register auth models with the admin.
@@ -16,6 +17,7 @@
from django.contrib.admin.models import LogEntry, DELETION
from django.contrib.admin.sites import LOGIN_FORM_KEY
from django.contrib.admin.util 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
@@ -4361,3 +4363,20 @@ def test_delete_view(self):
class NamespacedAdminKeepChangeListFiltersTests(AdminKeepChangeListFiltersTests):
admin_site = site2
+
+
+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(admin.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")
Please sign in to comment.
Something went wrong with that request. Please try again.