Django

Code

Changeset 6578

Show
Ignore:
Timestamp:
10/21/07 09:50:47 (1 year ago)
Author:
mtredinnick
Message:

Changed the default form presentation of datetime values to not include the
fractional second values (they usually aren't going to be needed). Based on
patches from yi.codeplayer@gmail.com, andrews and Wiliam Alves de Souza. Fixed #4428, #4487

Files:

Legend:

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

    r6577 r6578  
    1212 
    1313from util import ErrorList, ValidationError 
    14 from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple 
     14from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, DateTimeInput 
    1515 
    1616try: 
     
    285285 
    286286class DateTimeField(Field): 
     287    widget = DateTimeInput 
     288 
    287289    def __init__(self, input_formats=None, *args, **kwargs): 
    288290        super(DateTimeField, self).__init__(*args, **kwargs) 
  • django/trunk/django/newforms/widgets.py

    r6563 r6578  
    99 
    1010import copy 
     11import datetime 
    1112from itertools import chain 
    1213 
     
    2021    'Widget', 'TextInput', 'PasswordInput', 
    2122    'HiddenInput', 'MultipleHiddenInput', 
    22     'FileInput', 'Textarea', 'CheckboxInput', 
     23    'FileInput', 'DateTimeInput', 'Textarea', 'CheckboxInput', 
    2324    'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect', 
    2425    'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget', 
     
    134135    def render(self, name, value, attrs=None): 
    135136        return super(FileInput, self).render(name, None, attrs=attrs) 
    136          
     137 
    137138    def value_from_datadict(self, data, files, name): 
    138139        "File widgets take data from FILES, not POST" 
     
    151152        final_attrs = self.build_attrs(attrs, name=name) 
    152153        return u'<textarea%s>%s</textarea>' % (flatatt(final_attrs), escape(value)) 
     154 
     155class DateTimeInput(Input): 
     156    input_type = 'text' 
     157    format = '%Y-%m-%d %H:%M:%S'     # '2006-10-25 14:30:59' 
     158 
     159    def __init__(self, attrs=None, format=None): 
     160        super(DateTimeInput, self).__init__(attrs) 
     161        if format: 
     162            self.format = format 
     163 
     164    def render(self, name, value, attrs=None): 
     165        return super(DateTimeInput, self).render(name, 
     166                value.strftime(self.format), attrs) 
    153167 
    154168class CheckboxInput(Widget): 
     
    433447    def decompress(self, value): 
    434448        if value: 
    435             return [value.date(), value.time()
     449            return [value.date(), value.time().replace(microsecond=0)
    436450        return [None, None] 
  • django/trunk/docs/newforms.txt

    r6564 r6578  
    12021202~~~~~~~~~~~~~~~~~ 
    12031203 
    1204     * Default widget: ``TextInput`` 
     1204    * Default widget: ``DateTimeInput`` 
    12051205    * Empty value: ``None`` 
    12061206    * Normalizes to: A Python ``datetime.datetime`` object. 
     
    12221222    '%m/%d/%y %H:%M',        # '10/25/06 14:30' 
    12231223    '%m/%d/%y',              # '10/25/06' 
     1224 
     1225**New in Django development version:** The ``DateTimeField`` used to use a 
     1226``TextInput`` widget by default. This has now changed. 
    12241227 
    12251228``DecimalField`` 
     
    15591562                                  instances. 
    15601563    ``FileInput``                 ``<input type='file' ...`` 
     1564    ``DateTimeInput``             ``<input type='text' ...`` 
    15611565    ``Textarea``                  ``<textarea>...</textarea>`` 
    15621566    ``CheckboxInput``             ``<input type='checkbox' ...`` 
     
    15711575                                  one for the Date, and one for the Time. 
    15721576    ============================  =========================================== 
     1577 
     1578**New in Django development version:** The ``DateTimeInput`` has been added 
     1579since the last release. 
    15731580 
    15741581Specifying widgets 
  • django/trunk/tests/regressiontests/forms/widgets.py

    r6563 r6578  
    852852>>> w.render('date', datetime.datetime(2006, 1, 10, 7, 30)) 
    853853u'<input type="text" class="pretty" value="2006-01-10" name="date_0" /><input type="text" class="pretty" value="07:30:00" name="date_1" />' 
     854 
     855# DateTimeInput ############################################################### 
     856 
     857>>> w = DateTimeInput() 
     858>>> d = datetime.datetime(2007, 9, 17, 12, 51, 34, 482548) 
     859>>> print d 
     8602007-09-17 12:51:34.482548 
     861 
     862The microseconds are trimmed on display, by default. 
     863>>> w.render('date', d) 
     864u'<input type="text" name="date" value="2007-09-17 12:51:34" />' 
     865>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34)) 
     866u'<input type="text" name="date" value="2007-09-17 12:51:34" />' 
     867>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51)) 
     868u'<input type="text" name="date" value="2007-09-17 12:51:00" />' 
    854869"""