[IMP] fields: make attribute 'default' callable
authorRaphael Collet <rco@openerp.com>
Thu, 2 Oct 2014 11:35:00 +0000 (13:35 +0200)
committerRaphael Collet <rco@openerp.com>
Thu, 9 Oct 2014 07:18:02 +0000 (09:18 +0200)
openerp/addons/test_inherit/tests/test_inherit.py
openerp/fields.py

index c1b6206..9047c49 100644 (file)
@@ -22,7 +22,7 @@ class test_inherits(common.TransactionCase):
         mother = self.env['test.inherit.mother']
         field = mother._fields['name']
         self.assertTrue(field.required)
-        self.assertEqual(field.default, 'Unknown')
+        self.assertEqual(field.default(mother), 'Unknown')
 
         # the field daugther.template_id should inherit
         # model_name='test.inherit.mother', string='Template', required=True
index e72b6db..4a9f4a2 100644 (file)
@@ -272,7 +272,7 @@ class Field(object):
     related = None              # sequence of field names, for related fields
     related_sudo = True         # whether related fields should be read as admin
     company_dependent = False   # whether `self` is company-dependent (property field)
-    default = None              # default value (literal or callable)
+    default = None              # default(recs) returns the default value
 
     string = None               # field label
     help = None                 # field tooltip
@@ -312,6 +312,10 @@ class Field(object):
         attrs.update(self._attrs)       # necessary in case self is not in cls
 
         # initialize `self` with `attrs`
+        if 'default' in attrs and not callable(attrs['default']):
+            # make default callable
+            value = attrs['default']
+            attrs['default'] = lambda recs: value
         if attrs.get('compute'):
             # by default, computed fields are not stored, not copied and readonly
             attrs['store'] = attrs.get('store', False)
@@ -824,8 +828,8 @@ class Field(object):
 
     def determine_default(self, record):
         """ determine the default value of field `self` on `record` """
-        if self.default is not None:
-            value = self.default(record) if callable(self.default) else self.default
+        if self.default:
+            value = self.default(record)
             record._cache[self] = self.convert_to_cache(value, record)
         elif self.compute:
             self._compute_value(record)