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):
10 return [0, TimeRangeField.SECONDS]
12 seconds = value.seconds + 86400 * value.days
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.ChoiceField(choices=UNIT_CHOICES)
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):
43 unit = int(data_list[1])
44 if unit == self.SECONDS:
45 return timedelta(seconds=data_list[0])
46 elif unit == self.MINUTES:
47 return timedelta(minutes=data_list[0])
48 elif unit == self.HOURS:
49 return timedelta(hours=data_list[0])
50 elif unit == self.DAYS:
51 return timedelta(days=data_list[0])
53 raise ValidationError(u"Nieprawidłowa jednostka")
55 raise ValidationError(u"Nieprawidłowa jednostka")