X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=qcg%2Ffields.py;h=a61560d6961fb46f4a9094319d0c4d305707f891;hb=HEAD;hp=3e5ec44e96b82bcbecc3df0d6bc71cffc126a657;hpb=9a6f1362b7cee897421fff89c53862558e6c73ca;p=qcg-portal.git diff --git a/qcg/fields.py b/qcg/fields.py index 3e5ec44..a61560d 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 = int(value.total_seconds()) if seconds % 60 != 0: return [seconds, TimeRangeField.SECONDS] @@ -40,8 +30,8 @@ class TimeRangeField(forms.MultiValueField): (DAYS, u"Dni"), ) - value = forms.IntegerField(min_value=0) - unit = forms.ChoiceField(choices=UNIT_CHOICES) + value = forms.IntegerField(min_value=0, required=False) + unit = forms.TypedChoiceField(choices=UNIT_CHOICES, coerce=int, required=False) 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")