diff --git a/django/contrib/admin/util.py b/django/contrib/admin/util.py
index 962d8f7f1db..177b2dacc52 100644
--- a/django/contrib/admin/util.py
+++ b/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
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index 2ec5c879499..8a53dee3eaf 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -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")