summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--odoo/addons/base/tests/test_expression.py11
-rw-r--r--odoo/models.py6
2 files changed, 14 insertions, 3 deletions
diff --git a/odoo/addons/base/tests/test_expression.py b/odoo/addons/base/tests/test_expression.py
index 810db9b888b..203915b0fc9 100644
--- a/odoo/addons/base/tests/test_expression.py
+++ b/odoo/addons/base/tests/test_expression.py
@@ -114,6 +114,17 @@ class TestExpression(SavepointCaseWithUserDemo):
test('not ilike', 'B', ['0', 'a'])
test('not like', 'AB', ['0', 'a', 'b', 'a b'])
+ def test_09_hierarchy_filtered_domain(self):
+ Partner = self.env['res.partner']
+ p = Partner.create({'name': 'dummy'})
+
+ # hierarchy without parent
+ self.assertFalse(p.parent_id)
+ p2 = self._search(Partner, [('parent_id', 'child_of', p.id)], [('id', '=', p.id)])
+ self.assertEqual(p2, p)
+ p3 = self._search(Partner, [('parent_id', 'parent_of', p.id)], [('id', '=', p.id)])
+ self.assertEqual(p3, p)
+
def test_10_hierarchy_in_m2m(self):
Partner = self.env['res.partner']
Category = self.env['res.partner.category']
diff --git a/odoo/models.py b/odoo/models.py
index d77c22f4dad..59b7f8e9858 100644
--- a/odoo/models.py
+++ b/odoo/models.py
@@ -5296,6 +5296,9 @@ Fields:
result.append(self.browse())
else:
(key, comparator, value) = d
+ if comparator in ('child_of', 'parent_of'):
+ result.append(self.search([('id', 'in', self.ids), d]))
+ continue
if key.endswith('.id'):
key = key[:-3]
if key == 'id':
@@ -5312,9 +5315,6 @@ Fields:
records_ids = OrderedSet()
for rec in self:
data = rec.mapped(key)
- if comparator in ('child_of', 'parent_of'):
- value = data.search([(data._parent_name, comparator, value)]).ids
- comparator = 'in'
if isinstance(data, BaseModel):
v = value
if (isinstance(value, list) or isinstance(value, tuple)) and len(value):