[1.6.x] Fixed #21431 -- GenRel->FK list_filter regression in admin
Report, analysis and tests from stephenmcd.
Backpatch of 752d3d70da
from master.
This commit is contained in:
parent
47abfa237e
commit
5730bf2819
|
@ -379,7 +379,9 @@ class NotRelationField(Exception):
|
||||||
|
|
||||||
|
|
||||||
def get_model_from_relation(field):
|
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
|
return field.model
|
||||||
elif getattr(field, 'rel'): # or isinstance?
|
elif getattr(field, 'rel'): # or isinstance?
|
||||||
return field.rel.to
|
return field.rel.to
|
||||||
|
|
|
@ -7,6 +7,7 @@ import datetime
|
||||||
|
|
||||||
from django.conf import settings, global_settings
|
from django.conf import settings, global_settings
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.core.files import temp as tempfile
|
from django.core.files import temp as tempfile
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
# Register auth models with the admin.
|
# Register auth models with the admin.
|
||||||
|
@ -16,6 +17,7 @@ from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
|
||||||
from django.contrib.admin.models import LogEntry, DELETION
|
from django.contrib.admin.models import LogEntry, DELETION
|
||||||
from django.contrib.admin.sites import LOGIN_FORM_KEY
|
from django.contrib.admin.sites import LOGIN_FORM_KEY
|
||||||
from django.contrib.admin.util import quote
|
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.views.main import IS_POPUP_VAR
|
||||||
from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase
|
from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase
|
||||||
from django.contrib.auth import REDIRECT_FIELD_NAME
|
from django.contrib.auth import REDIRECT_FIELD_NAME
|
||||||
|
@ -4361,3 +4363,20 @@ class AdminKeepChangeListFiltersTests(TestCase):
|
||||||
|
|
||||||
class NamespacedAdminKeepChangeListFiltersTests(AdminKeepChangeListFiltersTests):
|
class NamespacedAdminKeepChangeListFiltersTests(AdminKeepChangeListFiltersTests):
|
||||||
admin_site = site2
|
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")
|
||||||
|
|
Loading…
Reference in New Issue