fix message typo
[qcg-portal.git] / qcg / fields.py
index e067f46..ef5170a 100644 (file)
@@ -7,9 +7,9 @@ from django.core.exceptions import ValidationError
 class TimeRangeWidget(forms.MultiWidget):
     def decompress(self, value):
         if not value:
-            return [0, TimeRangeField.SECONDS]
+            return [None, None]
 
-        seconds = value.seconds + 86400 * value.days
+        seconds = int(value.total_seconds())
 
         if seconds % 60 != 0:
             return [seconds, TimeRangeField.SECONDS]
@@ -31,7 +31,7 @@ class TimeRangeField(forms.MultiValueField):
     )
 
     value = forms.IntegerField(min_value=0)
-    unit = forms.ChoiceField(choices=UNIT_CHOICES)
+    unit = forms.TypedChoiceField(choices=UNIT_CHOICES, coerce=int)
 
     widget = TimeRangeWidget(widgets=(value.widget, unit.widget))
 
@@ -39,17 +39,18 @@ class TimeRangeField(forms.MultiValueField):
         super(TimeRangeField, self).__init__((self.value, self.unit), *args, **kwargs)
 
     def compress(self, data_list):
-        try:
-            unit = int(data_list[1])
-            if unit == self.SECONDS:
-                return timedelta(seconds=data_list[0])
-            elif unit == self.MINUTES:
-                return timedelta(minutes=data_list[0])
-            elif unit == self.HOURS:
-                return timedelta(hours=data_list[0])
-            elif unit == self.DAYS:
-                return timedelta(days=data_list[0])
-            else:
-                raise ValidationError(u"Nieprawidłowa jednostka")
-        except ValueError:
-            raise ValidationError(u"Nieprawidłowa jednostka")
+        value, unit = data_list
+
+        if value is None:
+            return None
+
+        if unit == self.SECONDS:
+            return timedelta(seconds=value)
+        elif unit == self.MINUTES:
+            return timedelta(minutes=value)
+        elif unit == self.HOURS:
+            return timedelta(hours=value)
+        elif unit == self.DAYS:
+            return timedelta(days=value)
+
+        raise ValidationError(u"Nieprawidłowa jednostka")