2 from datetime import timedelta
3 from django import forms
4 from django.core.exceptions import ValidationError
7 class TimeRangeWidget(forms.MultiWidget):
8 def decompress(self, value):
12 seconds = value.total_seconds()
15 return [seconds, TimeRangeField.SECONDS]
16 elif seconds % 3600 != 0:
17 return [seconds / 60, TimeRangeField.MINUTES]
18 elif seconds % 86400 != 0:
19 return [seconds / 3600, TimeRangeField.HOURS]
21 return [seconds / 86400, TimeRangeField.DAYS]
24 class TimeRangeField(forms.MultiValueField):
25 SECONDS, MINUTES, HOURS, DAYS = range(4)
33 value = forms.IntegerField(min_value=0)
34 unit = forms.TypedChoiceField(choices=UNIT_CHOICES, coerce=int)
36 widget = TimeRangeWidget(widgets=(value.widget, unit.widget))
38 def __init__(self, *args, **kwargs):
39 super(TimeRangeField, self).__init__((self.value, self.unit), *args, **kwargs)
41 def compress(self, data_list):
42 value, unit = data_list
47 if unit == self.SECONDS:
48 return timedelta(seconds=value)
49 elif unit == self.MINUTES:
50 return timedelta(minutes=value)
51 elif unit == self.HOURS:
52 return timedelta(hours=value)
53 elif unit == self.DAYS:
54 return timedelta(days=value)
56 raise ValidationError(u"Nieprawidłowa jednostka")