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
This commit is contained in:
parent
646f2f6101
commit
8a3ef1f8bc
|
@ -27,14 +27,14 @@ from django.utils.translation import ugettext_lazy as _
|
||||||
from django.utils.encoding import smart_unicode, smart_str
|
from django.utils.encoding import smart_unicode, smart_str
|
||||||
|
|
||||||
from util import ErrorList, ValidationError
|
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
|
from django.core.files.uploadedfile import SimpleUploadedFile as UploadedFile
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'Field', 'CharField', 'IntegerField',
|
'Field', 'CharField', 'IntegerField',
|
||||||
'DEFAULT_DATE_INPUT_FORMATS', 'DateField',
|
'DEFAULT_DATE_INPUT_FORMATS', 'DateField',
|
||||||
'DEFAULT_TIME_INPUT_FORMATS', 'TimeField',
|
'DEFAULT_TIME_INPUT_FORMATS', 'TimeField',
|
||||||
'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField',
|
'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField', 'TimeField',
|
||||||
'RegexField', 'EmailField', 'FileField', 'ImageField', 'URLField',
|
'RegexField', 'EmailField', 'FileField', 'ImageField', 'URLField',
|
||||||
'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField',
|
'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField',
|
||||||
'ComboField', 'MultiValueField', 'FloatField', 'DecimalField',
|
'ComboField', 'MultiValueField', 'FloatField', 'DecimalField',
|
||||||
|
@ -311,6 +311,7 @@ DEFAULT_TIME_INPUT_FORMATS = (
|
||||||
)
|
)
|
||||||
|
|
||||||
class TimeField(Field):
|
class TimeField(Field):
|
||||||
|
widget = TimeInput()
|
||||||
default_error_messages = {
|
default_error_messages = {
|
||||||
'invalid': _(u'Enter a valid time.')
|
'invalid': _(u'Enter a valid time.')
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ from urlparse import urljoin
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'Media', 'MediaDefiningClass', 'Widget', 'TextInput', 'PasswordInput',
|
'Media', 'MediaDefiningClass', 'Widget', 'TextInput', 'PasswordInput',
|
||||||
'HiddenInput', 'MultipleHiddenInput',
|
'HiddenInput', 'MultipleHiddenInput',
|
||||||
'FileInput', 'DateTimeInput', 'Textarea', 'CheckboxInput',
|
'FileInput', 'DateTimeInput', 'TimeInput', 'Textarea', 'CheckboxInput',
|
||||||
'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect',
|
'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect',
|
||||||
'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget',
|
'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget',
|
||||||
)
|
)
|
||||||
|
@ -301,6 +301,16 @@ class DateTimeInput(Input):
|
||||||
value = value.strftime(self.format)
|
value = value.strftime(self.format)
|
||||||
return super(DateTimeInput, self).render(name, value, attrs)
|
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):
|
class CheckboxInput(Widget):
|
||||||
def __init__(self, attrs=None, check_test=bool):
|
def __init__(self, attrs=None, check_test=bool):
|
||||||
super(CheckboxInput, self).__init__(attrs)
|
super(CheckboxInput, self).__init__(attrs)
|
||||||
|
|
|
@ -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" />'
|
u'<input type="text" name="date" value="2007-09-17 12:51:34" />'
|
||||||
>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51))
|
>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51))
|
||||||
u'<input type="text" name="date" value="2007-09-17 12:51:00" />'
|
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" />'
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue