[IMP] use ORM reads when loading views
direct SQL query in core ORM means we can't override view loading to get them from other sources than the database. By using read() this can be done by overriding ir_ui_view.read. bzr revid: xmo@openerp.com-20130415100858-ucm97f318mjn5ugq
This commit is contained in:
parent
ef1cbabe25
commit
bbe0fbe2b9
|
@ -2055,6 +2055,7 @@ class BaseModel(object):
|
||||||
"""
|
"""
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
|
View = self.pool['ir.ui.view']
|
||||||
|
|
||||||
def encode(s):
|
def encode(s):
|
||||||
if isinstance(s, unicode):
|
if isinstance(s, unicode):
|
||||||
|
@ -2197,6 +2198,9 @@ class BaseModel(object):
|
||||||
sql_res = False
|
sql_res = False
|
||||||
parent_view_model = None
|
parent_view_model = None
|
||||||
view_ref = context.get(view_type + '_view_ref')
|
view_ref = context.get(view_type + '_view_ref')
|
||||||
|
|
||||||
|
view_fields = ['arch', 'name', 'field_parent', 'id',
|
||||||
|
'type', 'inherit_id', 'model']
|
||||||
# Search for a root (i.e. without any parent) view.
|
# Search for a root (i.e. without any parent) view.
|
||||||
while True:
|
while True:
|
||||||
if view_ref and not view_id:
|
if view_ref and not view_id:
|
||||||
|
@ -2206,22 +2210,25 @@ class BaseModel(object):
|
||||||
view_ref_res = cr.fetchone()
|
view_ref_res = cr.fetchone()
|
||||||
if view_ref_res:
|
if view_ref_res:
|
||||||
view_id = view_ref_res[0]
|
view_id = view_ref_res[0]
|
||||||
|
|
||||||
if view_id:
|
if view_id:
|
||||||
cr.execute("""SELECT arch,name,field_parent,id,type,inherit_id,model
|
ids = [view_id]
|
||||||
FROM ir_ui_view
|
|
||||||
WHERE id=%s""", (view_id,))
|
|
||||||
else:
|
else:
|
||||||
cr.execute("""SELECT arch,name,field_parent,id,type,inherit_id,model
|
# read does not guarantee ordering so directly take just first
|
||||||
FROM ir_ui_view
|
# search'ed id and read that, this way we don't care
|
||||||
WHERE model=%s AND type=%s AND inherit_id IS NULL
|
ids = View.search(cr, user, [
|
||||||
ORDER BY priority""", (self._name, view_type))
|
['model', '=', self._name],
|
||||||
sql_res = cr.dictfetchone()
|
['type', '=', view_type],
|
||||||
|
['inherit_id', '=', False],
|
||||||
|
], context=context, order='priority')[:1]
|
||||||
|
views = View.read(cr, user, ids, view_fields, context=context)
|
||||||
|
sql_res = views[0] if views else False
|
||||||
|
|
||||||
if not sql_res:
|
if not sql_res:
|
||||||
break
|
break
|
||||||
|
|
||||||
view_id = sql_res['inherit_id'] or sql_res['id']
|
view_id = sql_res['inherit_id'] or sql_res['id']
|
||||||
|
# due to read() inherit_id may be a name_get pair, unpack id
|
||||||
|
if isinstance(view_id, tuple): view_id, _name = view_id
|
||||||
parent_view_model = sql_res['model']
|
parent_view_model = sql_res['model']
|
||||||
if not sql_res['inherit_id']:
|
if not sql_res['inherit_id']:
|
||||||
break
|
break
|
||||||
|
|
Loading…
Reference in New Issue