class SplitTimeField(forms.MultiValueField):
"""
Field written to accept two fields Hour Field and Time Field
and combine them into TimeField.
"""
default_error_messages = {
'invalid_time': _(u'Enter a valid time.'),
}
def __init__(self, *args, **kwargs):
errors = self.default_error_messages.copy()
if 'error_messages' in kwargs:
errors.update(kwargs['error_messages'])
fields = (
forms.CharField(error_messages={'invalid': errors['invalid_time']}),
forms.CharField(error_messages={'invalid': errors['invalid_time']}),
)
super(SplitTimeField, self).__init__(fields, *args, **kwargs)
def compress(self, data_list):
if data_list:
# Raise a validation error if time or date is empty
# (possible if SplitDateTimeField has required=False).
if data_list[0] in (None, '') or data_list[1] in (None, ''):
raise forms.ValidationError(self.error_messages['invalid_time'])
return datetime.time(int(data_list[0]),int(data_list[1]))
return None
class SplitTimeWidget(forms.MultiWidget):
"""
Widget written to split widget into hours and minutes.
"""
def __init__(self, attrs=None):
widgets = (
forms.Select(attrs=attrs, choices=([(hour,hour) for hour in range(0,24)])), \
forms.Select(attrs=attrs, choices=([(minute, str(minute).zfill(2)) for minute in [0,15,30,45]]))
)
super(SplitTimeWidget, self).__init__(widgets, attrs)
def decompress(self, value):
if value:
return [value.hour, value.minute]
return [None, None]
Comments