class NonTimeSplitDateTimeField(forms.SplitDateTimeField): """Variation on SplitDateTimeField that does not enforce the Time to be required, accepting a default instead. example usage: class MonkeyForm(forms.ModelForm): start_date = NonTimeSplitDateTimeField( default_time=datetime.time(00,00,00), widget=widgets.AdminSplitDateTime(), required=False ) end_date = NonTimeSplitDateTimeField( default_time=datetime.time(11,59,59), widget=widgets.AdminSplitDateTime(), required=False ) """ def __init__(self, default_time, *args, **kwargs): self.default_time = default_time return super(NonTimeSplitDateTimeField, self).__init__( *args, **kwargs) def compress(self, data_list): if data_list: # Raise a validation error if date is empty # (possible if SplitDateTimeField has required=False). if data_list[0] in EMPTY_VALUES: raise ValidationError(self.error_messages['invalid_date']) if data_list[1] in EMPTY_VALUES: # Rather than raising an error (as super does) use the # default time passed in the constructor data_list[1] = self.default_time return datetime.datetime.combine(*data_list) return None