from django import forms import dateutil.parser class FuzzyDateTimeField(forms.Field): '''Like a DateTimeField, but uses dateutil.parser to parse datetime.''' def __init__(self, widget=forms.DateTimeInput, fuzzy=True, **kwargs): forms.Field.__init__(self, widget=widget, **kwargs) self.fuzzy = fuzzy def clean(self, val): super(FuzzyDateTimeField, self).clean(val) if not val: return None elif isinstance(val, datetime.datetime): return val try: return dateutil.parser.parse(val.strip(), fuzzy=self.fuzzy) except ValueError, err: raise forms.ValidationError(*err.args)