Author: andrewgodwin
Date: 2011-06-09 10:03:45 -0700 (Thu, 09 Jun 2011)
New Revision: 16347
Modified:
django/trunk/django/conf/global_settings.py
django/trunk/django/forms/fields.py
django/trunk/tests/regressiontests/forms/tests/fields.py
Log:
Fixed #9459: forms.HiddenInput and DateTime field loses microseconds. Thanks to
mt.
Modified: django/trunk/django/conf/global_settings.py
===================================================================
--- django/trunk/django/conf/global_settings.py 2011-06-09 15:39:12 UTC (rev
16346)
+++ django/trunk/django/conf/global_settings.py 2011-06-09 17:03:45 UTC (rev
16347)
@@ -366,12 +366,15 @@
# * Note that these format strings are different from the ones to display dates
DATETIME_INPUT_FORMATS = (
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
+ '%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
'%Y-%m-%d', # '2006-10-25'
'%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
+ '%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200'
'%m/%d/%Y %H:%M', # '10/25/2006 14:30'
'%m/%d/%Y', # '10/25/2006'
'%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
+ '%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200'
'%m/%d/%y %H:%M', # '10/25/06 14:30'
'%m/%d/%y', # '10/25/06'
)
Modified: django/trunk/django/forms/fields.py
===================================================================
--- django/trunk/django/forms/fields.py 2011-06-09 15:39:12 UTC (rev 16346)
+++ django/trunk/django/forms/fields.py 2011-06-09 17:03:45 UTC (rev 16347)
@@ -338,7 +338,15 @@
try:
return self.strptime(value, format)
except ValueError:
- continue
+ if format.endswith('.%f'):
+ if not value.count('.')==1:
+ continue
+ try:
+ datetime_str, usecs_str = value.rsplit('.', 1)
+ usecs = int(usecs_str)
+ return
datetime.datetime(*time.strptime(datetime_str, format[:-3])[:6]+(usecs,))
+ except ValueError:
+ continue
raise ValidationError(self.error_messages['invalid'])
def strptime(self, value, format):
@@ -417,7 +425,7 @@
return super(DateTimeField, self).to_python(value)
def strptime(self, value, format):
- return datetime.datetime(*time.strptime(value, format)[:6])
+ return datetime.datetime.strptime(value, format)
class RegexField(CharField):
def __init__(self, regex, max_length=None, min_length=None,
error_message=None, *args, **kwargs):
Modified: django/trunk/tests/regressiontests/forms/tests/fields.py
===================================================================
--- django/trunk/tests/regressiontests/forms/tests/fields.py 2011-06-09
15:39:12 UTC (rev 16346)
+++ django/trunk/tests/regressiontests/forms/tests/fields.py 2011-06-09
17:03:45 UTC (rev 16347)
@@ -379,14 +379,17 @@
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30),
f.clean(datetime.datetime(2006, 10, 25, 14, 30)))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 59),
f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59)))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 59, 200),
f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59, 200)))
+ self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45, 200),
f.clean('2006-10-25 14:30:45.000200'))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45),
f.clean('2006-10-25 14:30:45'))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30),
f.clean('2006-10-25 14:30:00'))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30),
f.clean('2006-10-25 14:30'))
self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0),
f.clean('2006-10-25'))
+ self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45, 200),
f.clean('10/25/2006 14:30:45.000200'))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45),
f.clean('10/25/2006 14:30:45'))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30),
f.clean('10/25/2006 14:30:00'))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30),
f.clean('10/25/2006 14:30'))
self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0),
f.clean('10/25/2006'))
+ self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45, 200),
f.clean('10/25/06 14:30:45.000200'))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45),
f.clean('10/25/06 14:30:45'))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30),
f.clean('10/25/06 14:30:00'))
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30),
f.clean('10/25/06 14:30'))
--
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.