Author: mtredinnick
Date: 2007-10-21 09:50:47 -0500 (Sun, 21 Oct 2007)
New Revision: 6578

Modified:
   django/trunk/django/newforms/fields.py
   django/trunk/django/newforms/widgets.py
   django/trunk/docs/newforms.txt
   django/trunk/tests/regressiontests/forms/widgets.py
Log:
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 [EMAIL PROTECTED], andrews and Wiliam Alves de Souza. Fixed #4428, 
#4487


Modified: django/trunk/django/newforms/fields.py
===================================================================
--- django/trunk/django/newforms/fields.py      2007-10-21 14:50:20 UTC (rev 
6577)
+++ django/trunk/django/newforms/fields.py      2007-10-21 14:50:47 UTC (rev 
6578)
@@ -11,7 +11,7 @@
 from django.utils.encoding import StrAndUnicode, smart_unicode
 
 from util import ErrorList, ValidationError
-from widgets import TextInput, PasswordInput, HiddenInput, 
MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, 
SelectMultiple
+from widgets import TextInput, PasswordInput, HiddenInput, 
MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, 
SelectMultiple, DateTimeInput
 
 try:
     from decimal import Decimal, DecimalException
@@ -284,6 +284,8 @@
 )
 
 class DateTimeField(Field):
+    widget = DateTimeInput
+
     def __init__(self, input_formats=None, *args, **kwargs):
         super(DateTimeField, self).__init__(*args, **kwargs)
         self.input_formats = input_formats or DEFAULT_DATETIME_INPUT_FORMATS

Modified: django/trunk/django/newforms/widgets.py
===================================================================
--- django/trunk/django/newforms/widgets.py     2007-10-21 14:50:20 UTC (rev 
6577)
+++ django/trunk/django/newforms/widgets.py     2007-10-21 14:50:47 UTC (rev 
6578)
@@ -8,6 +8,7 @@
     from sets import Set as set   # Python 2.3 fallback
 
 import copy
+import datetime
 from itertools import chain
 
 from django.utils.datastructures import MultiValueDict
@@ -19,7 +20,7 @@
 __all__ = (
     'Widget', 'TextInput', 'PasswordInput',
     'HiddenInput', 'MultipleHiddenInput',
-    'FileInput', 'Textarea', 'CheckboxInput',
+    'FileInput', 'DateTimeInput', 'Textarea', 'CheckboxInput',
     'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect',
     'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget',
 )
@@ -133,7 +134,7 @@
 
     def render(self, name, value, attrs=None):
         return super(FileInput, self).render(name, None, attrs=attrs)
-        
+
     def value_from_datadict(self, data, files, name):
         "File widgets take data from FILES, not POST"
         return files.get(name, None)
@@ -151,6 +152,19 @@
         final_attrs = self.build_attrs(attrs, name=name)
         return u'<textarea%s>%s</textarea>' % (flatatt(final_attrs), 
escape(value))
 
+class DateTimeInput(Input):
+    input_type = 'text'
+    format = '%Y-%m-%d %H:%M:%S'     # '2006-10-25 14:30:59'
+
+    def __init__(self, attrs=None, format=None):
+        super(DateTimeInput, self).__init__(attrs)
+        if format:
+            self.format = format
+
+    def render(self, name, value, attrs=None):
+        return super(DateTimeInput, self).render(name,
+                value.strftime(self.format), attrs)
+
 class CheckboxInput(Widget):
     def __init__(self, attrs=None, check_test=bool):
         super(CheckboxInput, self).__init__(attrs)
@@ -432,5 +446,5 @@
 
     def decompress(self, value):
         if value:
-            return [value.date(), value.time()]
+            return [value.date(), value.time().replace(microsecond=0)]
         return [None, None]

Modified: django/trunk/docs/newforms.txt
===================================================================
--- django/trunk/docs/newforms.txt      2007-10-21 14:50:20 UTC (rev 6577)
+++ django/trunk/docs/newforms.txt      2007-10-21 14:50:47 UTC (rev 6578)
@@ -1201,7 +1201,7 @@
 ``DateTimeField``
 ~~~~~~~~~~~~~~~~~
 
-    * Default widget: ``TextInput``
+    * Default widget: ``DateTimeInput``
     * Empty value: ``None``
     * Normalizes to: A Python ``datetime.datetime`` object.
     * Validates that the given value is either a ``datetime.datetime``,
@@ -1222,6 +1222,9 @@
     '%m/%d/%y %H:%M',        # '10/25/06 14:30'
     '%m/%d/%y',              # '10/25/06'
 
+**New in Django development version:** The ``DateTimeField`` used to use a
+``TextInput`` widget by default. This has now changed.
+
 ``DecimalField``
 ~~~~~~~~~~~~~~~~
 
@@ -1558,6 +1561,7 @@
     ``MultipleHiddenInput``       Multiple ``<input type='hidden' ...``
                                   instances.
     ``FileInput``                 ``<input type='file' ...``
+    ``DateTimeInput``             ``<input type='text' ...``
     ``Textarea``                  ``<textarea>...</textarea>``
     ``CheckboxInput``             ``<input type='checkbox' ...``
     ``Select``                    ``<select><option ...``
@@ -1571,6 +1575,9 @@
                                   one for the Date, and one for the Time.
     ============================  ===========================================
 
+**New in Django development version:** The ``DateTimeInput`` has been added
+since the last release.
+
 Specifying widgets
 ------------------
 

Modified: django/trunk/tests/regressiontests/forms/widgets.py
===================================================================
--- django/trunk/tests/regressiontests/forms/widgets.py 2007-10-21 14:50:20 UTC 
(rev 6577)
+++ django/trunk/tests/regressiontests/forms/widgets.py 2007-10-21 14:50:47 UTC 
(rev 6578)
@@ -851,4 +851,19 @@
 >>> w = SplitDateTimeWidget(attrs={'class': 'pretty'})
 >>> w.render('date', datetime.datetime(2006, 1, 10, 7, 30))
 u'<input type="text" class="pretty" value="2006-01-10" name="date_0" /><input 
type="text" class="pretty" value="07:30:00" name="date_1" />'
+
+# DateTimeInput ###############################################################
+
+>>> w = DateTimeInput()
+>>> d = datetime.datetime(2007, 9, 17, 12, 51, 34, 482548)
+>>> print d
+2007-09-17 12:51:34.482548
+
+The microseconds are trimmed on display, by default.
+>>> w.render('date', d)
+u'<input type="text" name="date" value="2007-09-17 12:51:34" />'
+>>> w.render('date', datetime.datetime(2007, 9, 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" />'
 """


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to