diff options
| author | Raphael Collet <rco@odoo.com> | 2019-09-23 13:41:18 +0000 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2019-09-30 15:42:36 +0000 |
| commit | 4b1cb41cf7a3f936a1e6d00a2bb6a6a29e82d711 (patch) | |
| tree | c222eb33232a664293d7363cd42d50b87b80341f /odoo/addons/test_new_api/models.py | |
| parent | 333f1087cf50efa4e053e5d9fef0b80e421967f1 (diff) | |
[FIX] models, fields: cache consistency for one2many fields
Issue: after many2one updates, the cache of the corresponding one2many
fields was inconsistent when the latter depends on `active_test`. One
of the values in cache was updated, while the other was left intact.
We simplify the cache by not making the field depend on context: the
cache value contains all the records in the relation (corresponding to
`active_test=False`). The value of the field is automatically filtered
by the `active` field when the value is accessed.
This makes it easier to maintain the cache value, guarantees its
consistency, and avoids queries to read the one2many field with
`active_test=False`, after having set it with `active_test=True`.
Diffstat (limited to 'odoo/addons/test_new_api/models.py')
| -rw-r--r-- | odoo/addons/test_new_api/models.py | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/odoo/addons/test_new_api/models.py b/odoo/addons/test_new_api/models.py index 5e1f8d359bf..d12dddd4b8d 100644 --- a/odoo/addons/test_new_api/models.py +++ b/odoo/addons/test_new_api/models.py @@ -138,7 +138,7 @@ class Message(models.Model): @api.constrains('author', 'discussion') def _check_author(self): - for message in self: + for message in self.with_context(active_test=False): if message.discussion and message.author not in message.discussion.participants: raise ValidationError(_("Author must be among the discussion participants.")) @@ -716,3 +716,12 @@ class Mixin(models.AbstractModel): class ExtendedDisplay(models.Model): _name = 'test_new_api.display' _inherit = ['test_new_api.mixin', 'test_new_api.display'] + + +class ModelActiveField(models.Model): + _name = 'test_new_api.model_active_field' + _description = 'A model with active field' + + active = fields.Boolean(default=True) + parent_id = fields.Many2one('test_new_api.model_active_field') + children_ids = fields.One2many('test_new_api.model_active_field', 'parent_id') |
