fields: prevent PercentagePerYearField to be strings (#326)
This commit is contained in:
parent
1707e20bd6
commit
b1f0842647
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue