Index: main.py
===================================================================
--- main.py	(revision 4306)
+++ main.py	(working copy)
@@ -572,11 +572,34 @@
         self.pk_attname = self.lookup_opts.pk.attname
 
     def get_filters(self, request):
+        from django.db.models.query import LOOKUP_SEPARATOR
+        class FakeForeignKey(object):
+            """
+            A class to represent a ForeignKey that spans multiple foreign keys
+            over multiple model classes.
+            """
+            def __init__(self, field, lookups):
+                # Traverse the relationships to reach the final model class.
+                for field_name in lookups[1:]:
+                    model = field.rel.to
+                    new_field = model._meta.get_field(field_name)
+                    if not new_field.rel: break
+                    field = new_field
+                self.verbose_name = field.verbose_name
+                self.rel = field.rel
+                # Rejoin the lookups using the separator so that the
+                # RelatedFilterSpec uses the correct lookup_kwarg.
+                self.name = LOOKUP_SEPARATOR.join(lookups)
+
         filter_specs = []
         if self.lookup_opts.admin.list_filter and not self.opts.one_to_one_field:
-            filter_fields = [self.lookup_opts.get_field(field_name) \
-                              for field_name in self.lookup_opts.admin.list_filter]
-            for f in filter_fields:
+            for field_name in self.lookup_opts.admin.list_filter:
+                field_lookups = field_name.split(LOOKUP_SEPARATOR)
+                f = self.lookup_opts.get_field(field_lookups[0])
+                # If the field name spans multiple models, wrap the field in
+                # a FakeForeignKey.
+                if len(field_lookups) > 1 and f.rel:
+                    f = FakeForeignKey(f, field_lookups)
                 spec = FilterSpec.create(f, request, self.params, self.model)
                 if spec and spec.has_output():
                     filter_specs.append(spec)
