# -*- coding: utf-8 -*- from django.forms import fields from django.utils.currency import Currency, NumberFormatError from django.forms.util import ValidationError from django.forms import widgets_special class CurrencyField(fields.DecimalField): widget = widgets_special.CurrencyInput def __init__(self, max_value=None, min_value=None, max_digits=None, *args, **kwargs): kwargs["decimal_places"] = 2 fields.DecimalField.__init__(self, max_value, min_value, max_digits, *args, **kwargs) def clean(self, value): if value is None: return None try: value = Currency(value, parse_string=True) except NumberFormatError, e: raise ValidationError(e.message) return Currency(super(CurrencyField, self).clean(value))