def to_python(self, value): self.validators.append( validators.DecimalValidator(self.max_digits, self.decimal_places)) res = super(UpdatedDecimalField, self).to_python(value) converted = res.quantize( Decimal(1) / (Decimal(10)**self.decimal_places)) if converted == res: return converted else: return res
def __init__(self, *, max_value=None, min_value=None, max_digits=None, decimal_places=None, **kwargs): self.max_digits, self.decimal_places = max_digits, decimal_places super().__init__(max_value=max_value, min_value=min_value, **kwargs) self.validators.append( validators.DecimalValidator(max_digits, decimal_places))
def validators(self): return super().validators + [ validators.DecimalValidator(self.max_digits, self.decimal_places) ]
class XSerializer(serializers.Serializer): field = serializers.CharField(validators=[ validators.DecimalValidator(max_digits=4, decimal_places=2) ])
def get_validators(self, validators): return super().get_validators(validators) + [ django_validators.DecimalValidator(self.type.precision, self.type.scale) ]