Customising Fields
Here's an example of how we created a MoneyField that knows how to validate a currency (dollar) value. Both parser and formatter are modules that we wrote to convert between formats.
1 import parser, formatter
2
3 class MoneyField(FloatField):
4
5 def validate(self, form, s):
6 s = s.strip()
7 if not self.required and s == '':
8 return
9 try:
10 parser.money(s)
11 except ValueError, e:
12 raise FieldValidationError('Invalid value "%s" for money' % s)
13
14 def get_merge_value(self, s):
15 s = s.strip()
16 if not self.required and s == '':
17 return
18 return parser.money(s)
19
20 def get_display_value(self, ctx, form):
21 return formatter.money(self.get_value())