diff --git a/bin/addons/base/ir/ir_ui_view.py b/bin/addons/base/ir/ir_ui_view.py index 059d441e245..40d4be92b6a 100644 --- a/bin/addons/base/ir/ir_ui_view.py +++ b/bin/addons/base/ir/ir_ui_view.py @@ -44,17 +44,23 @@ def _check_xml(self, cr, uid, ids, context=None): class view_custom(osv.osv): _name = 'ir.ui.view.custom' _columns = { - 'ref_id': fields.many2one('ir.ui.view', 'Original View'), - 'user_id': fields.many2one('res.users', 'User'), + 'ref_id': fields.many2one('ir.ui.view', 'Original View', select=True), + 'user_id': fields.many2one('res.users', 'User', select=True), 'arch': fields.text('View Architecture', required=True), } + + def _auto_init(self, cr, context=None): + super(view_custom, self)._auto_init(cr, context) + cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_ui_view_custom_user_id_ref_id\'') + if not cr.fetchone(): + cr.execute('CREATE INDEX ir_ui_view_custom_user_id_ref_id ON ir_ui_view_custom (user_id, ref_id)') view_custom() class view(osv.osv): _name = 'ir.ui.view' _columns = { 'name': fields.char('View Name',size=64, required=True), - 'model': fields.char('Object', size=64, required=True), + 'model': fields.char('Object', size=64, required=True, select=True), 'priority': fields.integer('Sequence', required=True), 'type': fields.selection(( ('tree','Tree'), @@ -64,9 +70,9 @@ class view(osv.osv): ('calendar', 'Calendar'), ('diagram','Diagram'), ('gantt', 'Gantt'), - ('search','Search')), 'View Type', required=True), + ('search','Search')), 'View Type', required=True, select=True), 'arch': fields.text('View Architecture', required=True), - 'inherit_id': fields.many2one('ir.ui.view', 'Inherited View', ondelete='cascade'), + 'inherit_id': fields.many2one('ir.ui.view', 'Inherited View', ondelete='cascade', select=True), 'field_parent': fields.char('Child Field',size=64), 'xml_id': fields.function(osv.osv.get_xml_id, type='char', size=128, string="XML ID", method=True, help="ID of the view defined in xml file"), @@ -80,6 +86,12 @@ class view(osv.osv): (_check_xml, 'Invalid XML for View Architecture!', ['arch']) ] + def _auto_init(self, cr, context=None): + super(view, self)._auto_init(cr, context) + cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_ui_view_model_type_inherit_id\'') + if not cr.fetchone(): + cr.execute('CREATE INDEX ir_ui_view_model_type_inherit_id ON ir_ui_view (model, type, inherit_id)') + def read(self, cr, uid, ids, fields=None, context={}, load='_classic_read'): if not isinstance(ids, (list, tuple)): @@ -195,10 +207,16 @@ class view_sc(osv.osv): 'name': fields.char('Shortcut Name', size=64, required=True), 'res_id': fields.many2one('ir.ui.menu','Resource Ref.', ondelete='cascade'), 'sequence': fields.integer('Sequence'), - 'user_id': fields.many2one('res.users', 'User Ref.', required=True, ondelete='cascade'), - 'resource': fields.char('Resource Name', size=64, required=True) + 'user_id': fields.many2one('res.users', 'User Ref.', required=True, ondelete='cascade', select=True), + 'resource': fields.char('Resource Name', size=64, required=True, select=True) } + def _auto_init(self, cr, context=None): + super(view_sc, self)._auto_init(cr, context) + cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_ui_view_sc_user_id_resource\'') + if not cr.fetchone(): + cr.execute('CREATE INDEX ir_ui_view_sc_user_id_resource ON ir_ui_view_sc (user_id, resource)') + def get_sc(self, cr, uid, user_id, model='ir.ui.menu', context={}): ids = self.search(cr, uid, [('user_id','=',user_id),('resource','=',model)], context=context) return self.read(cr, uid, ids, ['res_id','name'], context=context)