# Python Imports import new import django.newforms as forms from django.db.models.fields import DecimalField decimal_delimiter="," class CustomInput(forms.widgets.TextInput): def render(self, name, value, attrs=None): if value and not isinstance(value, basestring): value=self.dbfield.format_number(value).replace(".", decimal_delimiter) return forms.widgets.TextInput.render(self, name, value, attrs=attrs) class I18NDecimalHTMLField(forms.DecimalField): def __init__(self, *args, **kwargs): self.widget = CustomInput() self.widget.dbfield=self.dbfield forms.DecimalField.__init__(self, *args, **kwargs) def clean(self, value): if not self.required and value in forms.fields.EMPTY_VALUES: return None value = value.strip() value=value.replace(decimal_delimiter, ".") return forms.DecimalField.clean(self, value) class I18NDecimalField(DecimalField): def formfield(self, **kwargs): # You can only pass a form.Field class. That's why I # create a new class here. form_class=new.classobj("I18NDecimalHTMLField-%d" % self.decimal_places, (I18NDecimalHTMLField,), globals()) form_class.dbfield=self defaults = { 'max_digits': self.max_digits, 'decimal_places': self.decimal_places, 'form_class': form_class } defaults.update(kwargs) return super(DecimalField, self).formfield(**defaults) def get_internal_type(self): return 'DecimalField'