[FIX] res.users: safer read() when computing default company value

The goal is to avoid any kind of prefetching
of other fields when copmuting the default
company, as this will sometimes happen in the
middle of a database update, when the default
company is used for setting the default value
of new columns. In that case the db schema
may not fully match the in-memory model, leading
to an SQL error.
This commit is contained in:
Olivier Dony 2014-07-25 16:33:48 +02:00
parent 48140f113a
commit f90b29b938
1 changed files with 8 additions and 5 deletions

View File

@ -226,11 +226,14 @@ class res_users(osv.osv):
def _get_company(self,cr, uid, context=None, uid2=False):
if not uid2:
uid2 = uid
# use read method to compute default values to don't create browse record and fetch all fields
# browse crash for install or update module
user = self.pool['res.users'].read(cr, uid, uid2, ['company_id'], context)
company_id = user['company_id'] and user['company_id'][0] or False
return company_id
# Use read() to compute default company, and pass load=_classic_write to
# avoid useless name_get() calls. This will avoid prefetching fields
# while computing default values for new db columns, as the
# db backend may not be fully initialized yet.
user_data = self.pool['res.users'].read(cr, uid, uid2, ['company_id'],
context=context, load='_classic_write')
comp_id = user_data['company_id']
return comp_id or False
def _get_companies(self, cr, uid, context=None):
c = self._get_company(cr, uid, context)