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.