diff --git a/trytond/ir/translation.py b/trytond/ir/translation.py index 37b9f856e1..17af7ff1e6 100644 --- a/trytond/ir/translation.py +++ b/trytond/ir/translation.py @@ -337,13 +337,15 @@ class Translation(ModelSQL, ModelView): @classmethod def search_rec_name(cls, name, clause): clause = tuple(clause) - translations = cls.search(['OR', - ('src',) + clause[1:], - ('value',) + clause[1:], - ]) - if translations: - return [('id', 'in', [t.id for t in translations])] - return [(cls._rec_name,) + clause[1:]] + if clause[1].startswith('!') or clause[1].startswith('not '): + bool_op = 'AND' + else: + bool_op = 'OR' + return [bool_op, + ('src',) + clause[1:], + ('value',) + clause[1:], + (cls._rec_name,) + clause[1:], + ] @classmethod def search_model(cls, name, clause): diff --git a/trytond/res/user.py b/trytond/res/user.py index 396a6b7d0c..662d77bbcd 100644 --- a/trytond/res/user.py +++ b/trytond/res/user.py @@ -274,12 +274,14 @@ class User(ModelSQL, ModelView): @classmethod def search_rec_name(cls, name, clause): - users = cls.search([ - ('login', '=', clause[2]), - ], order=[]) - if len(users) == 1: - return [('id', '=', users[0].id)] - return [(cls._rec_name,) + tuple(clause[1:])] + if clause[1].startswith('!') or clause[1].startswith('not '): + bool_op = 'AND' + else: + bool_op = 'OR' + return [bool_op, + ('login',) + tuple(clause[1:]), + (cls._rec_name,) + tuple(clause[1:]), + ] @classmethod def copy(cls, users, default=None):