Antony Lesuisse (OpenERP) has proposed merging
lp:~openerp-dev/openobject-server/trunk-rec_name_assertion_and_fallback into
lp:openobject-server.
Requested reviews:
OpenERP Core Team (openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-rec_name_assertion_and_fallback/+merge/117412
--
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-rec_name_assertion_and_fallback/+merge/117412
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-server/trunk-rec_name_assertion_and_fallback.
=== modified file 'openerp/osv/orm.py'
--- openerp/osv/orm.py 2012-07-23 13:51:13 +0000
+++ openerp/osv/orm.py 2012-07-31 11:11:19 +0000
@@ -657,7 +657,7 @@
_columns = {}
_constraints = []
_defaults = {}
- _rec_name = 'name'
+ _rec_name = False
_parent_name = 'parent_id'
_parent_store = False
_parent_order = False
@@ -1054,6 +1054,13 @@
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:
+ assert self.rec_name in self._columns
+ else:
+ self._rec_name = 'name'
+
+
def __export_row(self, cr, uid, row, fields, context=None):
if context is None:
context = {}
@@ -1567,6 +1574,12 @@
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 @@
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 @@
: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,uid,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 @@
: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,uid,context))
return view
def _get_default_calendar_view(self, cr, user, context=None):
@@ -1918,7 +1921,7 @@
return False
view = etree.Element('calendar', string=self._description)
- etree.SubElement(view, 'field', name=self._rec_name)
+ etree.SubElement(view, 'field', self._rec_name_get(cr,uid,context))
if (self._date_name not in self._columns):
date_found = False
@@ -2276,8 +2279,13 @@
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
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp