def clear_cache(self, cr):
"""clear cache and update models. Notify other workers to restart their registry."""
self.precision_get.clear_cache(self)
- for obj in self.pool.obj_list():
- for colname, col in self.pool.get(obj)._columns.items():
- if hasattr(col, 'digits_change'):
- col.digits_change(cr)
+ env = openerp.api.Environment(cr, SUPERUSER_ID, {})
+ for model in self.pool.values():
+ for field in model._fields.values():
+ if field.type == 'float':
+ field._setup_digits(env)
RegistryManager.signal_caches_change(cr.dbname)
def create(self, cr, uid, data, context=None):
def __init__(self, string=None, digits=None, **kwargs):
super(Float, self).__init__(string=string, _digits=digits, **kwargs)
+ def _setup_digits(self, env):
+ """ Setup the digits for `self` and its corresponding column """
+ self.digits = self._digits(env.cr) if callable(self._digits) else self._digits
+ if self.store:
+ column = env[self.model_name]._columns[self.name]
+ column.digits_change(env.cr)
+
def _setup_regular(self, env):
super(Float, self)._setup_regular(env)
- self.digits = self._digits(env.cr) if callable(self._digits) else self._digits
+ self._setup_digits(env)
_related_digits = property(attrgetter('digits'))
# One possible reason caches have been invalidated is the
# use of decimal_precision.write(), in which case we need
# to refresh fields.float columns.
- for model in registry.models.values():
- for column in model._columns.values():
- if hasattr(column, 'digits_change'):
- column.digits_change(cr)
+ env = openerp.api.Environment(cr, SUPERUSER_ID, {})
+ for model in registry.values():
+ for field in model._fields.values():
+ if field.type == 'float':
+ field._setup_digits(env)
registry.base_registry_signaling_sequence = r
registry.base_cache_signaling_sequence = c
finally: