Code

Ticket #9459: datetimefield-microseconds.diff

File datetimefield-microseconds.diff, 1.6 KB (added by guettli, 5 years ago)
Line 
1Index: tests/regressiontests/forms/fields.py
2===================================================================
3--- tests/regressiontests/forms/fields.py       (Revision 9287)
4+++ tests/regressiontests/forms/fields.py       (Arbeitskopie)
5@@ -560,6 +560,8 @@
6 datetime.datetime(2006, 10, 25, 14, 30, 59, 200)
7 >>> f.clean('2006-10-25 14:30:45')
8 datetime.datetime(2006, 10, 25, 14, 30, 45)
9+>>> f.clean('2006-10-25 14:30:45.123')
10+datetime.datetime(2006, 10, 25, 14, 30, 45, 123)
11 >>> f.clean('2006-10-25 14:30:00')
12 datetime.datetime(2006, 10, 25, 14, 30)
13 >>> f.clean('2006-10-25 14:30')
14Index: django/forms/fields.py
15===================================================================
16--- django/forms/fields.py      (Revision 9287)
17+++ django/forms/fields.py      (Arbeitskopie)
18@@ -382,9 +382,21 @@
19             if len(value) != 2:
20                 raise ValidationError(self.error_messages['invalid'])
21             value = '%s %s' % tuple(value)
22+
23+        # To support DateTimeField in HiddenInput (incl. microseconds)
24+        # YYYY-MM-DD HH:MM:SS.sss
25+        if '.' in value:
26+            try:
27+                value, usecs = value.split('.')
28+                usecs = int(usecs)
29+            except ValueError:
30+                raise ValidationError(self.error_messages['invalid'])
31+        else:
32+            usecs = 0
33+
34         for format in self.input_formats:
35             try:
36-                return datetime.datetime(*time.strptime(value, format)[:6])
37+                return datetime.datetime(*time.strptime(value, format)[:6], **{'microsecond': usecs})
38             except ValueError:
39                 continue
40         raise ValidationError(self.error_messages['invalid'])