Commit 5730bf28 authored by Anssi Kääriäinen's avatar Anssi Kääriäinen
Browse files

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

Report, analysis and tests from stephenmcd.

Backpatch of 752d3d70 from master.
parent 47abfa23
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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
+19 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ import datetime

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.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.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 @@ class AdminKeepChangeListFiltersTests(TestCase):

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")