odoo/openerp
Xavier ALT f02b23006b [FIX] fields: during an onchange(), do not invalidate *2many fields because of their domain
Our usage of domain on fields One2many seems to trigger an obscure behaviour on
onchange.

With the following (simplified) config:

    Message(models.Model):
        _name = 'test_new_api.message'
        important = fields.Boolean('Important')

    Discussion(models.Model):
        _name = 'test_new_api.discussion'
        name = fields.Char('Name')
        important_emails = fields.One2Many('test_new_api.emailmessage', 'discussion',
                                           domain=[('important', '=', True)])

    Email(models.Model):
        _name = 'test_new_api.emailmessage'
        _inherits = {'test_new_api.message': 'message'}

        discussion = fields.Many2one('test_new_api.discussion', 'Discussion')
        message = fields.Many2one('test_new_api.message', 'Message')

Steps:
- We change 'name' on discussion, triggers an `onchange()` call
- we ends up filling cache on virtual record (on secondary fields, we calling
  record.mapped('important_emails.important'))
- we get a cache miss ('important' field not provided, only 'important_emails' ids,
  i.e with no change on existing records)
- we fill the cache, this mark 'important' field as modified
- because of commit 5676d81 and because 'important' is that case is a related (i.e
  computed) field we triggers cache recomputation
- as there is no way to recompute 'important_emails' for virtual record (no real
  ID) we ends up with empty 'important_emails' generating removal of existing records.

=> Finally changing any value for 'test_new_api.discussion' that trigger an onchange
will always reset 'important_emails' to empty

Fixed by Raphael Collet <rco@odoo.com>, and test by Xavier Alt <xal@odoo.com>.
2016-06-17 17:50:25 +02:00
..
addons [FIX] fields: during an onchange(), do not invalidate *2many fields because of their domain 2016-06-17 17:50:25 +02:00
cli [FIX] scaffold: correctly decode utf8 templates 2016-03-15 11:25:16 +01:00
conf [MERGE] openerp.pooler is deprecated. 2013-03-27 17:40:45 +01:00
modules [FIX] base: only run postinstall tests for installed or updated modules 2016-04-04 14:32:20 +02:00
osv [FIX] expression: fix missing results in direct search on many2many fields 2016-04-29 15:48:19 +02:00
report [MERGE] forward port of branch 7.0 up to 99c87b6 2015-05-21 16:33:45 +02:00
service [FIX] server: Do not listen when --no-xmlrpc is set 2016-05-26 11:01:42 +02:00
tests [MERGE] forward port of branch saas-3 up to 24bcdb7 2015-09-22 15:40:28 +02:00
tools [FIX] tools: correct Burmese locale 2016-05-13 12:53:17 +02:00
workflow [MERGE] forward port of branch saas-3 up to 2e9b33b 2015-11-03 12:45:50 +01:00
PKG-INFO [REM] netrpc: KILL EVERYBODY 2013-02-21 13:18:25 +01:00
__init__.py [IMP] fields: turn field.digits and column.digits into dynamic properties 2015-03-23 14:36:15 +01:00
api.py [FIX] addons: fix usage of decorators `api.v7`/`api.v8` 2016-02-09 10:01:43 +01:00
exceptions.py [ADD] doc: new documentation, with training tutorials, and new scaffolding 2014-08-22 17:51:20 +02:00
fields.py [FIX] fields: during an onchange(), do not invalidate *2many fields because of their domain 2016-06-17 17:50:25 +02:00
http.py [FIX] http: force removing the debug in redirection 2016-06-13 15:18:09 +02:00
import_xml.rng [MERGE] ir-ui-view split active and show_customize 2014-08-31 16:56:44 +02:00
loglevels.py [REF] logging: removed pseudo log-level TEST. 2013-03-26 16:58:44 +01:00
models.py [IMP] models: mark records as recomputed as soon as they are 2016-05-12 11:44:57 +02:00
netsvc.py [MERGE] forward port of branch 7.0 up to 1c0bc7c 2015-06-30 12:47:27 +02:00
pooler.py [IMP] registry: avoid every direct access registry.db, and rename attribute as registry._db 2014-04-09 15:35:15 +02:00
release.py [REL] Odoo 8.0 2014-09-18 12:11:18 +02:00
sql_db.py [IMP] fields: use a "lazy" cursor to compute attribute `digits` 2016-01-29 09:37:27 +01:00