From ef8d6eda013ee677e3ecfbc73afdf15ea2739469 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 15 Jan 2016 13:46:14 +0100 Subject: [PATCH] [IMP] fields: overriding a field with `default=None` discards its default value --- openerp/addons/test_inherit/models.py | 5 +++-- openerp/addons/test_inherit/tests/test_inherit.py | 6 ++++++ openerp/fields.py | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/openerp/addons/test_inherit/models.py b/openerp/addons/test_inherit/models.py index 0875c4fed5a..241bca11a02 100644 --- a/openerp/addons/test_inherit/models.py +++ b/openerp/addons/test_inherit/models.py @@ -12,6 +12,7 @@ class mother(models.Model): } _defaults = { 'name': 'Foo', + 'state': 'a', } surname = fields.Char(compute='_compute_surname') @@ -43,8 +44,8 @@ class mother(models.Model): # extend the name field: make it required and change its default value name = fields.Char(required=True, default='Bar') - # extend the selection of the state field - state = fields.Selection(selection_add=[('c', 'C')]) + # extend the selection of the state field, and discard its default value + state = fields.Selection(selection_add=[('c', 'C')], default=None) # override the computed field, and extend its dependencies @api.one diff --git a/openerp/addons/test_inherit/tests/test_inherit.py b/openerp/addons/test_inherit/tests/test_inherit.py index ddf5d1424a0..2bfd2715dc3 100644 --- a/openerp/addons/test_inherit/tests/test_inherit.py +++ b/openerp/addons/test_inherit/tests/test_inherit.py @@ -40,6 +40,12 @@ class test_inherits(common.TransactionCase): self.assertEqual(daughter._defaults.get('name'), "Baz") self.assertEqual(daughter.default_get(['name']), {'name': "Baz"}) + # the field mother.state must have no default value + field = mother._fields['state'] + self.assertFalse(field.default) + self.assertNotIn('state', mother._defaults) + self.assertEqual(mother.default_get(['state']), {}) + # the field daughter.template_id should have # comodel_name='test.inherit.mother', string='Template', required=True field = daughter._fields['template_id'] diff --git a/openerp/fields.py b/openerp/fields.py index d9943f98f65..960134ba082 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -454,8 +454,9 @@ class Field(object): if 'default' in field.args: # take the value, and adapt it for model._defaults value = field.args['default'] - self.default = default_new_to_new(self, value) - model._defaults[name] = default_new_to_old(self, value) + if value is not None: + self.default = default_new_to_new(self, value) + model._defaults[name] = default_new_to_old(self, value) return defaults = klass.__dict__.get('_defaults') or {}