You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
k4ever/k4ever/main/fields.py

72 lines
2.3 KiB

from django import forms
from django.core.exceptions import ValidationError
import re
#class CurrencyField(forms.IntegerField):
# default_error_message = {
# 'invalid': _(u'Enter a number.'),
# }
# def __init__(self, positive=True, *args, **kwargs):
# super(IntegerField, self).__init__(*args, **kwargs)
# self.positive = positive
# def to_python(self, value):
# value = super(IntegerField, self).to_python(value)
# if value in validators.EMPTY_VALUES:
# return None
# try:
# value = float(value.replace(",", "."))
# except:
# pass
class CurrencyInput (forms.TextInput):
def render(self, name, value, attrs=None):
if value != '':
try:
value = u"%.2f" % value
except TypeError:
pass
return super(CurrencyInput, self).render(name, value, attrs)
class CurrencyField (forms.RegexField):
widget = CurrencyInput
currencyRe = re.compile(r'^[0-9]{1,5}([,\.][0-9][0-9]?)?$')
#currencyRe = re.compile(r'^[0-9]{1,5}(.[0-9][0-9]?)?$')
# currencyRe = re.compile(r"^[0-9]")
def __init__(self, *args, **kwargs):
super(CurrencyField, self).__init__(
self.currencyRe, None, None, *args, **kwargs)
#class CurrencyField(forms.FloatField):
# widget = CurrencyInput
# moneyre = re.compile(r"^[0-9]{1,5}([\.][0-9][0-9])?$")
# def __init__(self, positive=False, allowPerCent=False, *args, **kwargs):
# super(forms.FloatField, self).__init__(*args, **kwargs)
# self.positive = positive
# self.allowPerCent = allowPerCent
def to_python(self, value):
#return super(forms.FloatField, self).to_python(value)
#raise ValidationError("WTF WTF WTF %s " % value)
#value = value.replace(",", ".")
#try:
# value = super(forms.FloatField, self).to_python(value)
#except ValidationError, e:
# raise NotImplementedError("%s %s" % (e, value))
#return value
value = value.replace(",", ".")
try:
value = float(value)
except (ValueError, TypeError):
raise ValidationError("Bitte gib eine Zahl ein")
# if not self.allowPerCent:
# tmpval = 100.0*value
# if tmpval == int(tmpval):
# raise ValidationError("Deine Zahl sollte nicht mehr als zwei Nachkommastellen haben. %s %s %s" % (tmpval, int(tmpval), tmpval-int(tmpval)))
# if self.positive and self.value < 0.0:
# raise ValidationError("Bitte gib eine positive Zahl an.")
return value
def clean(self, value):
value = super(CurrencyField, self).clean(value)
return float(value)