diff --git a/eo_gestion/eo_facture/fields.py b/eo_gestion/eo_facture/fields.py index 437f656..cb2b447 100644 --- a/eo_gestion/eo_facture/fields.py +++ b/eo_gestion/eo_facture/fields.py @@ -97,6 +97,20 @@ class PercentagePerYearFormField(forms.Field): return parse_percentage_per_year(value) +class PercentagePerYearDescriptor: + def __init__(self, field): + self.field = field + + def __set__(self, obj, value): + if isinstance(value, str): + value = parse_percentage_per_year(value) + if isinstance(value, list) and not isinstance(value, PercentagePerYear): + value = PercentagePerYear(value) + if not isinstance(value, PercentagePerYear): + raise ValueError('PercentagePerYear value expected') + obj.__dict__[self.field.name] = value + + class PercentagePerYearField(models.Field): default_validators = [check_percentage_per_year] @@ -143,3 +157,7 @@ class PercentagePerYearField(models.Field): defaults = {"form_class": PercentagePerYearFormField} defaults.update(kwargs) return super().formfield(**kwargs) + + def contribute_to_class(self, cls, name, **kwargs): + super().contribute_to_class(cls, name, **kwargs) + setattr(cls, self.name, PercentagePerYearDescriptor(self))