[MERGE] _rec_name is less permissive and has now a fallback.
bzr revid: vmt@openerp.com-20120801092015-7nkx43tcvd4ngmn3
This commit is contained in:
commit
9559fcd398
|
@ -657,7 +657,7 @@ class BaseModel(object):
|
|||
_columns = {}
|
||||
_constraints = []
|
||||
_defaults = {}
|
||||
_rec_name = 'name'
|
||||
_rec_name = None
|
||||
_parent_name = 'parent_id'
|
||||
_parent_store = False
|
||||
_parent_order = False
|
||||
|
@ -1054,6 +1054,13 @@ class BaseModel(object):
|
|||
assert self._log_access, "TransientModels must have log_access turned on, "\
|
||||
"in order to implement their access rights policy"
|
||||
|
||||
# Validate rec_name
|
||||
if self._rec_name is not None:
|
||||
assert self._rec_name in self._columns.keys() + ['id'], "Invalid rec_name %s for model %s" % (self._rec_name, self._name)
|
||||
else:
|
||||
self._rec_name = 'name'
|
||||
|
||||
|
||||
def __export_row(self, cr, uid, row, fields, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
@ -1567,6 +1574,12 @@ class BaseModel(object):
|
|||
res.extend(self.pool.get(parent).fields_get_keys(cr, user, context))
|
||||
return res
|
||||
|
||||
def _rec_name_fallback(self, cr, uid, context=None):
|
||||
rec_name = self._rec_name
|
||||
if rec_name not in self._columns:
|
||||
rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id"
|
||||
return rec_name
|
||||
|
||||
#
|
||||
# Overload this method if you need a window title which depends on the context
|
||||
#
|
||||
|
@ -1859,8 +1872,7 @@ class BaseModel(object):
|
|||
return view
|
||||
|
||||
def _get_default_search_view(self, cr, user, context=None):
|
||||
""" Generates a single-field tree view, using _rec_name if
|
||||
it's one of the columns or the first column it finds otherwise
|
||||
""" Generates a single-field search view, based on _rec_name.
|
||||
|
||||
:param cr: database cursor
|
||||
:param int user: user id
|
||||
|
@ -1868,17 +1880,12 @@ class BaseModel(object):
|
|||
:returns: a tree view as an lxml document
|
||||
:rtype: etree._Element
|
||||
"""
|
||||
_rec_name = self._rec_name
|
||||
if _rec_name not in self._columns:
|
||||
_rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id"
|
||||
|
||||
view = etree.Element('search', string=self._description)
|
||||
etree.SubElement(view, 'field', name=_rec_name)
|
||||
etree.SubElement(view, 'field', name=self._rec_name_fallback(cr, user, context))
|
||||
return view
|
||||
|
||||
def _get_default_tree_view(self, cr, user, context=None):
|
||||
""" Generates a single-field tree view, using _rec_name if
|
||||
it's one of the columns or the first column it finds otherwise
|
||||
""" Generates a single-field tree view, based on _rec_name.
|
||||
|
||||
:param cr: database cursor
|
||||
:param int user: user id
|
||||
|
@ -1886,12 +1893,8 @@ class BaseModel(object):
|
|||
:returns: a tree view as an lxml document
|
||||
:rtype: etree._Element
|
||||
"""
|
||||
_rec_name = self._rec_name
|
||||
if _rec_name not in self._columns:
|
||||
_rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id"
|
||||
|
||||
view = etree.Element('tree', string=self._description)
|
||||
etree.SubElement(view, 'field', name=_rec_name)
|
||||
etree.SubElement(view, 'field', name=self._rec_name_fallback(cr, user, context))
|
||||
return view
|
||||
|
||||
def _get_default_calendar_view(self, cr, user, context=None):
|
||||
|
@ -1918,7 +1921,7 @@ class BaseModel(object):
|
|||
return False
|
||||
|
||||
view = etree.Element('calendar', string=self._description)
|
||||
etree.SubElement(view, 'field', name=self._rec_name)
|
||||
etree.SubElement(view, 'field', self._rec_name_fallback(cr, user, context))
|
||||
|
||||
if (self._date_name not in self._columns):
|
||||
date_found = False
|
||||
|
@ -2276,8 +2279,13 @@ class BaseModel(object):
|
|||
return []
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
return [(r['id'], tools.ustr(r[self._rec_name])) for r in self.read(cr, user, ids,
|
||||
[self._rec_name], context, load='_classic_write')]
|
||||
|
||||
rec_name = self._rec_name
|
||||
if rec_name not in self._columns:
|
||||
res = [(r['id'], "%s,%s"%(self._name,r['id'])) for r in self.read(cr, user, ids, ['id'], context, load='_classic_write')]
|
||||
else:
|
||||
res = [(r['id'], tools.ustr(r[rec_name])) for r in self.read(cr, user, ids, [rec_name], context, load='_classic_write')]
|
||||
return res
|
||||
|
||||
def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100):
|
||||
"""Search for records that have a display name matching the given ``name`` pattern if compared
|
||||
|
|
Loading…
Reference in New Issue