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
-~----------~----~----~----~------~----~------~--~---