diff --git a/bin/osv/fields.py b/bin/osv/fields.py index beab2ea3b7e..5d373a168ea 100644 --- a/bin/osv/fields.py +++ b/bin/osv/fields.py @@ -630,11 +630,9 @@ class function(_column): if 'relation' in args: self._obj = args['relation'] - if 'digits' in args: - self.digits = args['digits'] - else: - self.digits = (16,2) - + self.digits = args.get('digits', (16,2)) + self.digits_compute = args.get('digits_compute', None) + self._fnct_inv_arg = fnct_inv_arg if not fnct_inv: self.readonly = 1 @@ -656,6 +654,13 @@ class function(_column): self._symbol_f = float._symbol_f self._symbol_set = float._symbol_set + def digits_change(self, cr): + if self.digits_compute: + t = self.digits_compute(cr) + self._symbol_set=('%s', lambda x: ('%.'+str(t[1])+'f') % (__builtin__.float(x or 0.0),)) + self.digits = t + + def search(self, cr, uid, obj, name, args, context=None): if not self._fnct_search: #CHECKME: should raise an exception diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 62529d34795..0165d4e7a4a 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -2296,7 +2296,7 @@ class orm(orm_template): self._columns = self._columns.copy() for store_field in self._columns: f = self._columns[store_field] - if isinstance(f, fields.float): + if hasattr(f, 'digits_change'): f.digits_change(cr) if not isinstance(f, fields.function): continue