Author: julien
Date: 2011-11-20 03:12:37 -0800 (Sun, 20 Nov 2011)
New Revision: 17125

Modified:
   django/trunk/django/contrib/admin/widgets.py
   django/trunk/tests/regressiontests/admin_widgets/tests.py
Log:
Fixed #12073 -- Made `AdminDateWidget` and `AdminTimeWidget` consider 
user-supplied `attrs`. Thanks to elliss for the report and to koenb for the 
patch.

Modified: django/trunk/django/contrib/admin/widgets.py
===================================================================
--- django/trunk/django/contrib/admin/widgets.py        2011-11-20 11:04:37 UTC 
(rev 17124)
+++ django/trunk/django/contrib/admin/widgets.py        2011-11-20 11:12:37 UTC 
(rev 17125)
@@ -53,8 +53,11 @@
         js = ["calendar.js", "admin/DateTimeShortcuts.js"]
         return forms.Media(js=[static("admin/js/%s" % path) for path in js])
 
-    def __init__(self, attrs={}, format=None):
-        super(AdminDateWidget, self).__init__(attrs={'class': 'vDateField', 
'size': '10'}, format=format)
+    def __init__(self, attrs=None, format=None):
+        final_attrs = {'class': 'vDateField', 'size': '10'}
+        if attrs is not None:
+            final_attrs.update(attrs)
+        super(AdminDateWidget, self).__init__(attrs=final_attrs, format=format)
 
 class AdminTimeWidget(forms.TimeInput):
 
@@ -63,8 +66,11 @@
         js = ["calendar.js", "admin/DateTimeShortcuts.js"]
         return forms.Media(js=[static("admin/js/%s" % path) for path in js])
 
-    def __init__(self, attrs={}, format=None):
-        super(AdminTimeWidget, self).__init__(attrs={'class': 'vTimeField', 
'size': '8'}, format=format)
+    def __init__(self, attrs=None, format=None):
+        final_attrs = {'class': 'vTimeField', 'size': '8'}
+        if attrs is not None:
+            final_attrs.update(attrs)
+        super(AdminTimeWidget, self).__init__(attrs=final_attrs, format=format)
 
 class AdminSplitDateTime(forms.SplitDateTimeWidget):
     """

Modified: django/trunk/tests/regressiontests/admin_widgets/tests.py
===================================================================
--- django/trunk/tests/regressiontests/admin_widgets/tests.py   2011-11-20 
11:04:37 UTC (rev 17124)
+++ django/trunk/tests/regressiontests/admin_widgets/tests.py   2011-11-20 
11:12:37 UTC (rev 17125)
@@ -205,7 +205,42 @@
             '<select multiple="multiple" name="test" 
class="selectfilterstacked">\n</select><script 
type="text/javascript">addEvent(window, "load", function(e) 
{SelectFilter.init("id_test", "test", 1, "%(ADMIN_MEDIA_PREFIX)s"); 
});</script>\n' % admin_media_prefix()
         )
 
+class AdminDateWidgetTest(DjangoTestCase):
+    def test_attrs(self):
+        """
+        Ensure that user-supplied attrs are used.
+        Refs #12073.
+        """
+        w = widgets.AdminDateWidget()
+        self.assertEqual(
+            conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30))),
+            '<input value="2007-12-01" type="text" class="vDateField" 
name="test" size="10" />',
+        )
+        # pass attrs to widget
+        w = widgets.AdminDateWidget(attrs={'size': 20, 'class': 'myDateField'})
+        self.assertEqual(
+            conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30))),
+            '<input value="2007-12-01" type="text" class="myDateField" 
name="test" size="20" />',
+        )
 
+class AdminTimeWidgetTest(DjangoTestCase):
+    def test_attrs(self):
+        """
+        Ensure that user-supplied attrs are used.
+        Refs #12073.
+        """
+        w = widgets.AdminTimeWidget()
+        self.assertEqual(
+            conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30))),
+            '<input value="09:30:00" type="text" class="vTimeField" 
name="test" size="8" />',
+        )
+        # pass attrs to widget
+        w = widgets.AdminTimeWidget(attrs={'size': 20, 'class': 'myTimeField'})
+        self.assertEqual(
+            conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30))),
+            '<input value="09:30:00" type="text" class="myTimeField" 
name="test" size="20" />',
+        )
+
 class AdminSplitDateTimeWidgetTest(DjangoTestCase):
     def test_render(self):
         w = widgets.AdminSplitDateTime()

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

Reply via email to