diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 8cc27c5..78be4ad 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -107,9 +107,10 @@ class BaseModelAdmin(object):
 
         # If we've got overrides for the formfield defined, use 'em. **kwargs
         # passed to formfield_for_dbfield override the defaults.
-        if db_field.__class__ in self.formfield_overrides:
-            kwargs = dict(self.formfield_overrides[db_field.__class__], **kwargs)
-            return db_field.formfield(**kwargs)
+        for klass in db_field.__class__.mro():
+            if klass in self.formfield_overrides:
+                kwargs = dict(self.formfield_overrides[klass], **kwargs)
+                return db_field.formfield(**kwargs)
 
         # For any other type of field, just call its formfield() method.
         return db_field.formfield(**kwargs)
diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py
index 1ba759b..66d30bc 100644
--- a/tests/regressiontests/admin_widgets/models.py
+++ b/tests/regressiontests/admin_widgets/models.py
@@ -4,6 +4,9 @@ from django.db import models
 from django.core.files.storage import default_storage
 from django.contrib.auth.models import User
 
+class MyFileField(models.FileField):
+    pass
+
 class Member(models.Model):
     name = models.CharField(max_length=100)
     birthdate = models.DateTimeField(blank=True, null=True)
@@ -23,6 +26,7 @@ class Album(models.Model):
     band = models.ForeignKey(Band)
     name = models.CharField(max_length=100)
     cover_art = models.FileField(upload_to='albums')
+    backside_art = MyFileField(upload_to='albums_back', null=True)
 
     def __unicode__(self):
         return self.name
diff --git a/tests/regressiontests/admin_widgets/tests.py b/tests/regressiontests/admin_widgets/tests.py
index c2b0403..1559d2b 100644
--- a/tests/regressiontests/admin_widgets/tests.py
+++ b/tests/regressiontests/admin_widgets/tests.py
@@ -98,6 +98,9 @@ class AdminFormfieldForDBFieldTests(TestCase):
         self.assertFormfield(models.Member, 'gender', widgets.AdminRadioSelect,
                              radio_fields={'gender':admin.VERTICAL})
 
+    def testInheritance(self):
+        self.assertFormfield(models.Album, 'backside_art', widgets.AdminFileWidget)
+
 
 class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
     fixtures = ["admin-widgets-users.xml"]
@@ -113,13 +116,13 @@ class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
 
 class AdminForeignKeyWidgetChangeList(DjangoTestCase):
     fixtures = ["admin-widgets-users.xml"]
-    
+
     def setUp(self):
         self.client.login(username="super", password="secret")
-    
+
     def tearDown(self):
         self.client.logout()
-    
+
     def test_changelist_foreignkey(self):
         response = self.client.get('/widget_admin/admin_widgets/car/')
         self.failUnless('/widget_admin/auth/user/add/' in response.content)
