Parsing Microseconds in a Django Form
May 26th, 2009 by tobiasThere’s currently no way to accept microsecond-precision input through a Django form’s DateTimeField. This is an acknowledged bug, but the official solution might not come very soon, because the real fix is non-trivial.
In the meantime, here’s one approach that will work in most cases:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class DateTimeWithUsecsField(forms.DateTimeField): def clean(self, value): if value and '.' in value: value, usecs = value.rsplit('.', 1) # rsplit in case '.' is used elsewhere usecs += '0'*(6-len(usecs)) # right pad with zeros if necessary try: usecs = int(usecs) except ValueError: raise ValidationError('Microseconds must be an integer') else: usecs = 0 cleaned_value = super(DateTimeWithUsecsField, self).clean(value) if cleaned_value: cleaned_value = cleaned_value.replace(microsecond=usecs) return cleaned_value |
To use this in a model form, you can override the field like so:
1 2 3 4 | class MyForm(forms.ModelForm): def __init__(self, *arg, **kwargs): super(MyForm, self).__init__(*arg, **kwargs) self.fields['date'] = DateTimeWithUsecsField() |

