There'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:
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:
class MyForm(forms.ModelForm):
def __init__(self, *arg, **kwargs):
super(MyForm, self).__init__(*arg, **kwargs)
self.fields['date'] = DateTimeWithUsecsField()