Skip to content

Instantly share code, notes, and snippets.

@bool-dev
Last active June 2, 2020 17:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bool-dev/9e2d8440e4d50ace4ec4 to your computer and use it in GitHub Desktop.
Save bool-dev/9e2d8440e4d50ace4ec4 to your computer and use it in GitHub Desktop.
"""
Sample DecimalField.
"""
from wtforms import DecimalField
class BetterDecimalField(DecimalField):
"""
Very similar to WTForms DecimalField, except with the option of rounding
the data always.
"""
def __init__(self, label=None, validators=None, places=2, rounding=None,
round_always=False, **kwargs):
super(BetterDecimalField, self).__init__(
label=label, validators=validators, places=places, rounding=
rounding, **kwargs)
self.round_always = round_always
def process_formdata(self, valuelist):
if valuelist:
try:
self.data = decimal.Decimal(valuelist[0])
if self.round_always and hasattr(self.data, 'quantize'):
exp = decimal.Decimal('.1') ** self.places
if self.rounding is None:
quantized = self.data.quantize(exp)
else:
quantized = self.data.quantize(exp, rounding=
self.rounding)
self.data = quantized
except (decimal.InvalidOperation, ValueError):
self.data = None
raise ValueError(self.gettext('Not a valid decimal value'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment