diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-08-23 17:33:09 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-08-23 17:33:09 +0000 |
| commit | 8a3ef1f8bce338b2ca255177b4ba6d020fd05bca (patch) | |
| tree | 665cae0b70f0fea5f04c48eca5a8088d4065aa4c | |
| parent | 646f2f6101cda3e20908928de44739dfff596b0f (diff) | |
Fixed #7499 -- Trim microseconds off rendering of form.TimeFields by default so
that they validate. Previous code didn't work with microseconds anyway, so this
is backwards compatible. Thanks to kevin for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8491 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/forms/fields.py | 5 | ||||
| -rw-r--r-- | django/forms/widgets.py | 12 | ||||
| -rw-r--r-- | tests/regressiontests/forms/widgets.py | 18 |
3 files changed, 32 insertions, 3 deletions
diff --git a/django/forms/fields.py b/django/forms/fields.py index 5537cf66f9..02c4c3db88 100644 --- a/django/forms/fields.py +++ b/django/forms/fields.py @@ -27,14 +27,14 @@ from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import smart_unicode, smart_str from util import ErrorList, ValidationError -from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, DateTimeInput +from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, DateTimeInput, TimeInput from django.core.files.uploadedfile import SimpleUploadedFile as UploadedFile __all__ = ( 'Field', 'CharField', 'IntegerField', 'DEFAULT_DATE_INPUT_FORMATS', 'DateField', 'DEFAULT_TIME_INPUT_FORMATS', 'TimeField', - 'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField', + 'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField', 'TimeField', 'RegexField', 'EmailField', 'FileField', 'ImageField', 'URLField', 'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField', 'ComboField', 'MultiValueField', 'FloatField', 'DecimalField', @@ -311,6 +311,7 @@ DEFAULT_TIME_INPUT_FORMATS = ( ) class TimeField(Field): + widget = TimeInput() default_error_messages = { 'invalid': _(u'Enter a valid time.') } diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 4dd0601d69..0d6c5bcbbc 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -22,7 +22,7 @@ from urlparse import urljoin __all__ = ( 'Media', 'MediaDefiningClass', 'Widget', 'TextInput', 'PasswordInput', 'HiddenInput', 'MultipleHiddenInput', - 'FileInput', 'DateTimeInput', 'Textarea', 'CheckboxInput', + 'FileInput', 'DateTimeInput', 'TimeInput', 'Textarea', 'CheckboxInput', 'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect', 'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget', ) @@ -301,6 +301,16 @@ class DateTimeInput(Input): value = value.strftime(self.format) return super(DateTimeInput, self).render(name, value, attrs) +class TimeInput(Input): + input_type = 'text' + + def render(self, name, value, attrs=None): + if value is None: + value = '' + elif hasattr(value, 'replace'): + value = value.replace(microsecond=0) + return super(TimeInput, self).render(name, value, attrs) + class CheckboxInput(Widget): def __init__(self, attrs=None, check_test=bool): super(CheckboxInput, self).__init__(attrs) diff --git a/tests/regressiontests/forms/widgets.py b/tests/regressiontests/forms/widgets.py index 40c4d01793..e0d9f42db5 100644 --- a/tests/regressiontests/forms/widgets.py +++ b/tests/regressiontests/forms/widgets.py @@ -1087,4 +1087,22 @@ u'<input type="text" name="date" value="2007-09-17 12:51:34" />' u'<input type="text" name="date" value="2007-09-17 12:51:34" />' >>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51)) u'<input type="text" name="date" value="2007-09-17 12:51:00" />' + +# TimeInput ############################################################### + +>>> w = TimeInput() +>>> w.render('time', None) +u'<input type="text" name="time" />' +>>> t = datetime.time(12, 51, 34, 482548) +>>> print t +12:51:34.482548 + +The microseconds are trimmed on display, by default. +>>> w.render('time', t) +u'<input type="text" name="time" value="12:51:34" />' +>>> w.render('time', datetime.time(12, 51, 34)) +u'<input type="text" name="time" value="12:51:34" />' +>>> w.render('time', datetime.time(12, 51)) +u'<input type="text" name="time" value="12:51:00" />' """ + |
