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
Comments