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

Reply via email to