[IMP] ir_values: ormcache method get_actions
On the Customer list, the request on `fields_view_get` takes 12 queries instead of 62. Overall, it saves queries on every call to `fields_view_get`. The cache is invalidated upon any creation/modification/deletion on models 'ir.values', 'ir.actions' and 'res.groups'.
This commit is contained in:
committed by
Olivier Dony
parent
20b6003dce
commit
6d239190ba
@@ -61,6 +61,18 @@ class actions(osv.osv):
|
||||
'usage': lambda *a: False,
|
||||
}
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
res = super(actions, self).create(cr, uid, vals, context=context)
|
||||
# ir_values.get_actions() depends on action records
|
||||
self.pool['ir.values'].clear_caches()
|
||||
return res
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
res = super(actions, self).write(cr, uid, ids, vals, context=context)
|
||||
# ir_values.get_actions() depends on action records
|
||||
self.pool['ir.values'].clear_caches()
|
||||
return res
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
"""unlink ir.action.todo which are related to actions which will be deleted.
|
||||
NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually."""
|
||||
@@ -71,7 +83,10 @@ class actions(osv.osv):
|
||||
ids = [ids]
|
||||
todo_ids = todo_obj.search(cr, uid, [('action_id', 'in', ids)], context=context)
|
||||
todo_obj.unlink(cr, uid, todo_ids, context=context)
|
||||
return super(actions, self).unlink(cr, uid, ids, context=context)
|
||||
res = super(actions, self).unlink(cr, uid, ids, context=context)
|
||||
# ir_values.get_actions() depends on action records
|
||||
self.pool['ir.values'].clear_caches()
|
||||
return res
|
||||
|
||||
def _get_eval_context(self, cr, uid, action=None, context=None):
|
||||
""" evaluation context to pass to safe_eval """
|
||||
|
||||
@@ -192,17 +192,17 @@ class ir_values(osv.osv):
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
res = super(ir_values, self).create(cr, uid, vals, context=context)
|
||||
self.get_defaults_dict.clear_cache(self)
|
||||
self.clear_caches()
|
||||
return res
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
res = super(ir_values, self).write(cr, uid, ids, vals, context=context)
|
||||
self.get_defaults_dict.clear_cache(self)
|
||||
self.clear_caches()
|
||||
return res
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
res = super(ir_values, self).unlink(cr, uid, ids, context=context)
|
||||
self.get_defaults_dict.clear_cache(self)
|
||||
self.clear_caches()
|
||||
return res
|
||||
|
||||
def set_default(self, cr, uid, model, field_name, value, for_all_users=True, company_id=False, condition=False):
|
||||
@@ -387,6 +387,7 @@ class ir_values(osv.osv):
|
||||
'value': action,
|
||||
})
|
||||
|
||||
@tools.ormcache_context(accepted_keys=('lang',))
|
||||
def get_actions(self, cr, uid, action_slot, model, res_id=False, context=None):
|
||||
"""Retrieves the list of actions bound to the given model's action slot.
|
||||
See the class description for more details about the various action
|
||||
|
||||
@@ -718,16 +718,22 @@ class groups_view(osv.osv):
|
||||
def create(self, cr, uid, values, context=None):
|
||||
res = super(groups_view, self).create(cr, uid, values, context)
|
||||
self.update_user_groups_view(cr, uid, context)
|
||||
# ir_values.get_actions() depends on action records
|
||||
self.pool['ir.values'].clear_caches()
|
||||
return res
|
||||
|
||||
def write(self, cr, uid, ids, values, context=None):
|
||||
res = super(groups_view, self).write(cr, uid, ids, values, context)
|
||||
self.update_user_groups_view(cr, uid, context)
|
||||
# ir_values.get_actions() depends on action records
|
||||
self.pool['ir.values'].clear_caches()
|
||||
return res
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
res = super(groups_view, self).unlink(cr, uid, ids, context)
|
||||
self.update_user_groups_view(cr, uid, context)
|
||||
# ir_values.get_actions() depends on action records
|
||||
self.pool['ir.values'].clear_caches()
|
||||
return res
|
||||
|
||||
def update_user_groups_view(self, cr, uid, context=None):
|
||||
|
||||
Reference in New Issue
Block a user