X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=qcg%2Ffields.py;h=a61560d6961fb46f4a9094319d0c4d305707f891;hb=c93c77235adf949baf3d10ccafb5624ed7c5db2c;hp=e067f463965f5adf8f845f818287a2764a5d322c;hpb=7c9392626226b7d859c5bc321ab15326fa1a17c6;p=qcg-portal.git diff --git a/qcg/fields.py b/qcg/fields.py index e067f46..a61560d 100644 --- a/qcg/fields.py +++ b/qcg/fields.py @@ -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] @@ -30,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)) @@ -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")