Author: jacob
Date: 2009-04-08 15:25:56 -0500 (Wed, 08 Apr 2009)
New Revision: 10454

Modified:
   django/trunk/django/contrib/admin/options.py
   django/trunk/tests/regressiontests/admin_widgets/models.py
   django/trunk/tests/regressiontests/admin_widgets/tests.py
Log:
Fixed #10059: `ModelAdmin.formfield_for_dbfield` now handles custom `Field` 
subclasses. Thanks, Alex Gaynor.

Modified: django/trunk/django/contrib/admin/options.py
===================================================================
--- django/trunk/django/contrib/admin/options.py        2009-04-08 19:58:24 UTC 
(rev 10453)
+++ django/trunk/django/contrib/admin/options.py        2009-04-08 20:25:56 UTC 
(rev 10454)
@@ -108,9 +108,10 @@
 
         # 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)

Modified: django/trunk/tests/regressiontests/admin_widgets/models.py
===================================================================
--- django/trunk/tests/regressiontests/admin_widgets/models.py  2009-04-08 
19:58:24 UTC (rev 10453)
+++ django/trunk/tests/regressiontests/admin_widgets/models.py  2009-04-08 
20:25:56 UTC (rev 10454)
@@ -4,6 +4,9 @@
 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 @@
     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

Modified: django/trunk/tests/regressiontests/admin_widgets/tests.py
===================================================================
--- django/trunk/tests/regressiontests/admin_widgets/tests.py   2009-04-08 
19:58:24 UTC (rev 10453)
+++ django/trunk/tests/regressiontests/admin_widgets/tests.py   2009-04-08 
20:25:56 UTC (rev 10454)
@@ -98,6 +98,8 @@
         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 +115,13 @@
 
 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)


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to