X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=qcg%2Ffields.py;h=73b46f46ac45202044b19af5463653eb132f4d64;hb=a5eea24f30969c1434c7743516f0195aa4bc53ae;hp=3e5ec44e96b82bcbecc3df0d6bc71cffc126a657;hpb=9a6f1362b7cee897421fff89c53862558e6c73ca;p=qcg-portal.git diff --git a/qcg/fields.py b/qcg/fields.py index 3e5ec44..73b46f4 100644 --- a/qcg/fields.py +++ b/qcg/fields.py @@ -4,22 +4,12 @@ from django import forms from django.core.exceptions import ValidationError -class PredefinedChoiceField(forms.ChoiceField): - def valid_value(self, value): - # any value is valid - return True - - -class MultiplePredefinedChoiceField(forms.MultipleChoiceField, PredefinedChoiceField): - pass - - 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 = value.total_seconds() if seconds % 60 != 0: return [seconds, TimeRangeField.SECONDS] @@ -41,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)) @@ -49,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")