summaryrefslogtreecommitdiff
path: root/addons/mail/models/mail_notification.py
diff options
context:
space:
mode:
authorAlvaro Fuentes <afu@odoo.com>2021-05-23 18:56:09 +0000
committerRaphael Collet <rco@odoo.com>2021-05-25 16:15:33 +0000
commitcb996aefb4aeeac9c41359ead523d52c66d21e29 (patch)
treeccada661075bd7327c6f4010e4969878b94c74b0 /addons/mail/models/mail_notification.py
parentcf3bf892c9833cd38a8269c8948d845dd3652403 (diff)
[FIX] core: fix filtered_domain for hierarchical terms
The method filtered_domain() is broken for domains with hierarchical terms ('child_of'/'parent_of'). To see *one* of the ways the implementation is broken, let `A` be a model with `parent_id` pointing to `A`, and `a1` a record of model `A` without parent (`a1.parent_id` is `False`), then this fails: assert a1 in a1.filtered_domain([("parent_id", "child_of", a1.id)]) The reason it fails is that on https://github.com/odoo/odoo/blob/f5519586d214a9b34ad24683a7f97c47802a3bad/odoo/models.py#L5377-L5380 `data` is empty since `a1` has no parent, thus https://github.com/odoo/odoo/blob/f5519586d214a9b34ad24683a7f97c47802a3bad/odoo/models.py#L5403-L5404 fails, therefore the result of `filtered_domain` is empty. Note: the implementation of the hierarchical operators is full of quirks that are hard to emulate otherwise than by reusing the original code. As a consequence, the current implementation may be broken in more than one way. Let's see another way the implementation is broken: let `B` be a model without a `parent_id` field and with a `friend_id` field pointing to `B`, and let `b1` be a record of model `B`. Then b1.filtered_domain([("friend_id", "child_of", b1.id)]) throws an exception of the form shown below: ValueError: Invalid field 'parent_id' in leaf "<osv.ExtendedLeaf: ('parent_id', 'child_of', 1) ... Meanwhile the following code is still valid and returs b1: B.search([("friend_id", "child_of", b1.id)]) closes odoo/odoo#71233 X-original-commit: e7a5ba95d8b7df5bbf545ef8afe0a1f5d0f70272 Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
Diffstat (limited to 'addons/mail/models/mail_notification.py')
0 files changed, 0 insertions, 0 deletions