[FIX] orm: Revert 332154444d
&& acd7d84da4
These revs. introduced an API change in the _name_search method. Indeed, the 'operator' attribute used to have 'ilike' as default value. This cannot be changed, as every modules overriding this method overrided it using the signature with operator='ilike' For instance, _name_search method of addons/base/ir/ir_model.py expects having 'ilike' as operator. As it was not anymore the case, it leaded to a crash when performing a name_search call on the model ir.model, like when adding a new custom field to a model, from the web client. opw-626161
This commit is contained in:
parent
2c99ddc612
commit
dcfd94cbf5
|
@ -642,11 +642,12 @@ class test_m2o(ImporterCase):
|
|||
@mute_logger('openerp.sql_db')
|
||||
def test_fail_id_mistype(self):
|
||||
result = self.import_(['value/.id'], [["foo"]])
|
||||
try:
|
||||
int("foo")
|
||||
except ValueError, exc:
|
||||
expected_message = unicode(exc)
|
||||
self.assertEqual(result['messages'], [message(expected_message)])
|
||||
|
||||
self.assertEqual(result['messages'], [
|
||||
message(u"Invalid database id 'foo' for the field 'unknown'",
|
||||
moreinfo=moreaction(res_model='ir.model.data',
|
||||
domain=[('model','=','export.integer')]))
|
||||
])
|
||||
self.assertIs(result['ids'], False)
|
||||
|
||||
def test_sub_field(self):
|
||||
|
|
|
@ -1691,7 +1691,7 @@ class BaseModel(object):
|
|||
return False
|
||||
|
||||
@api.model
|
||||
def name_search(self, name='', args=None, operator=None, limit=100):
|
||||
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
||||
""" name_search(name='', args=None, operator='ilike', limit=100) -> records
|
||||
|
||||
Search for records that have a display name matching the given
|
||||
|
@ -1717,7 +1717,7 @@ class BaseModel(object):
|
|||
"""
|
||||
return self._name_search(name, args, operator, limit=limit)
|
||||
|
||||
def _name_search(self, cr, user, name='', args=None, operator=None, context=None, limit=100, name_get_uid=None):
|
||||
def _name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100, name_get_uid=None):
|
||||
# private implementation of name_search, allows passing a dedicated user
|
||||
# for the name_get part to solve some access rights issues
|
||||
args = list(args or [])
|
||||
|
@ -1725,9 +1725,6 @@ class BaseModel(object):
|
|||
if not self._rec_name:
|
||||
_logger.warning("Cannot execute name_search, no _rec_name defined on %s", self._name)
|
||||
elif not (name == '' and operator == 'ilike'):
|
||||
if operator is None:
|
||||
field = self._fields[self._rec_name]
|
||||
operator = ('=' if field.type == 'integer' else 'ilike')
|
||||
args += [(self._rec_name, operator, name)]
|
||||
access_rights_uid = name_get_uid or user
|
||||
ids = self._search(cr, user, args, limit=limit, context=context, access_rights_uid=access_rights_uid)
|
||||
|
|
|
@ -1195,6 +1195,10 @@ class expression(object):
|
|||
query, params = self.__leaf_to_sql(
|
||||
create_substitution_leaf(eleaf, (left, '=', right), model))
|
||||
|
||||
elif left == 'id':
|
||||
query = '%s.id %s %%s' % (table_alias, operator)
|
||||
params = right
|
||||
|
||||
else:
|
||||
need_wildcard = operator in ('like', 'ilike', 'not like', 'not ilike')
|
||||
sql_operator = {'=like': 'like', '=ilike': 'ilike'}.get(operator, operator)
|
||||
|
|
Loading…
Reference in New Issue