Django

Code

Changeset 8491

Show
Ignore:
Timestamp:
08/23/08 12:33:09 (3 months ago)
Author:
mtredinnick
Message:

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.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/forms/fields.py

    r8489 r8491  
    2828 
    2929from util import ErrorList, ValidationError 
    30 from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, DateTimeInput 
     30from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, DateTimeInput, TimeInput 
    3131from django.core.files.uploadedfile import SimpleUploadedFile as UploadedFile 
    3232 
     
    3535    'DEFAULT_DATE_INPUT_FORMATS', 'DateField', 
    3636    'DEFAULT_TIME_INPUT_FORMATS', 'TimeField', 
    37     'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField', 
     37    'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField', 'TimeField', 
    3838    'RegexField', 'EmailField', 'FileField', 'ImageField', 'URLField', 
    3939    'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField', 
     
    312312 
    313313class TimeField(Field): 
     314    widget = TimeInput() 
    314315    default_error_messages = { 
    315316        'invalid': _(u'Enter a valid time.') 
  • django/trunk/django/forms/widgets.py

    r8285 r8491  
    2323    'Media', 'MediaDefiningClass', 'Widget', 'TextInput', 'PasswordInput', 
    2424    'HiddenInput', 'MultipleHiddenInput', 
    25     'FileInput', 'DateTimeInput', 'Textarea', 'CheckboxInput', 
     25    'FileInput', 'DateTimeInput', 'TimeInput', 'Textarea', 'CheckboxInput', 
    2626    'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect', 
    2727    'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget', 
     
    301301            value = value.strftime(self.format) 
    302302        return super(DateTimeInput, self).render(name, value, attrs) 
     303 
     304class TimeInput(Input): 
     305    input_type = 'text' 
     306 
     307    def render(self, name, value, attrs=None): 
     308        if value is None: 
     309            value = '' 
     310        elif hasattr(value, 'replace'): 
     311            value = value.replace(microsecond=0) 
     312        return super(TimeInput, self).render(name, value, attrs) 
    303313 
    304314class CheckboxInput(Widget): 
  • django/trunk/tests/regressiontests/forms/widgets.py

    r7977 r8491  
    10881088>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51)) 
    10891089u'<input type="text" name="date" value="2007-09-17 12:51:00" />' 
     1090 
     1091# TimeInput ############################################################### 
     1092 
     1093>>> w = TimeInput() 
     1094>>> w.render('time', None) 
     1095u'<input type="text" name="time" />' 
     1096>>> t = datetime.time(12, 51, 34, 482548) 
     1097>>> print t 
     109812:51:34.482548 
     1099 
     1100The microseconds are trimmed on display, by default. 
     1101>>> w.render('time', t) 
     1102u'<input type="text" name="time" value="12:51:34" />' 
     1103>>> w.render('time', datetime.time(12, 51, 34)) 
     1104u'<input type="text" name="time" value="12:51:34" />' 
     1105>>> w.render('time', datetime.time(12, 51)) 
     1106u'<input type="text" name="time" value="12:51:00" />' 
    10901107""" 
     1108