92 lines
3.3 KiB
Diff
92 lines
3.3 KiB
Diff
diff --git a/tryton/trytond/trytond/model/multivalue.py b/trytond/trytond/model/multivalue.py
|
|
index 5cf45d4a..f3765dd6 100644
|
|
--- a/tryton/trytond/trytond/model/multivalue.py
|
|
+++ b/tryton/trytond/trytond/model/multivalue.py
|
|
@@ -3,6 +3,7 @@
|
|
from ..pool import Pool
|
|
from .model import Model
|
|
from .match import MatchMixin
|
|
+from .fields import MultiValue
|
|
|
|
|
|
class MultiValueMixin(object):
|
|
@@ -32,7 +33,15 @@ class MultiValueMixin(object):
|
|
pattern = pattern.copy()
|
|
pattern[fname] = self
|
|
break
|
|
- return Value(**pattern)
|
|
+ record = Value(**pattern)
|
|
+ for oname, ofield in self._fields.items():
|
|
+ if (oname != field
|
|
+ and isinstance(ofield, MultiValue)
|
|
+ and self.multivalue_model(oname) == Value):
|
|
+ func = getattr(self, 'default_%s' % oname, None)
|
|
+ if func:
|
|
+ setattr(record, oname, func(**pattern))
|
|
+ return record
|
|
|
|
def __values(self, field, pattern, match_none=True):
|
|
Value = self.multivalue_model(field)
|
|
diff --git a/tryton/trytond/trytond/tests/multivalue.py b/trytond/trytond/tests/multivalue.py
|
|
index 45fb3863..f303a019 100644
|
|
--- a/tryton/trytond/trytond/tests/multivalue.py
|
|
+++ b/tryton/trytond/trytond/tests/multivalue.py
|
|
@@ -8,13 +8,25 @@ class ModelMultiValue(ModelSQL, MultiValueMixin):
|
|
"Model MultiValue"
|
|
__name__ = 'test.model_multivalue'
|
|
value = fields.MultiValue(fields.Char("Value"))
|
|
+ value_default = fields.MultiValue(fields.Char("Value Default"))
|
|
values = fields.One2Many(
|
|
'test.model_multivalue.value', 'record', "Values")
|
|
|
|
+ @classmethod
|
|
+ def multivalue_model(cls, field):
|
|
+ pool = Pool()
|
|
+ if field == 'value_default':
|
|
+ return pool.get('test.model_multivalue.value')
|
|
+ return super().multivalue_model(field)
|
|
+
|
|
@classmethod
|
|
def default_value(cls, **pattern):
|
|
return "default"
|
|
|
|
+ @classmethod
|
|
+ def default_value_default(cls, **pattern):
|
|
+ return "other default"
|
|
+
|
|
|
|
class ModelValue(ModelSQL, ValueMixin):
|
|
"Model Value"
|
|
@@ -23,6 +35,7 @@ class ModelValue(ModelSQL, ValueMixin):
|
|
'test.model_multivalue', "Record")
|
|
condition = fields.Char("Condition")
|
|
value = fields.Char("Value")
|
|
+ value_default = fields.Char("Value Default")
|
|
|
|
|
|
def register(module):
|
|
diff --git a/tryton/trytond/trytond/tests/test_multivalue.py b/trytond/trytond/tests/test_multivalue.py
|
|
index 73722978..5b97232a 100644
|
|
--- a/tryton/trytond/trytond/tests/test_multivalue.py
|
|
+++ b/tryton/trytond/trytond/tests/test_multivalue.py
|
|
@@ -13,6 +13,20 @@ class MultiValueTestCase(unittest.TestCase):
|
|
def setUpClass(cls):
|
|
activate_module('tests')
|
|
|
|
+ @with_transaction()
|
|
+ def test_set_multivalue_other_default(self):
|
|
+ "Test set_multivalue with other default"
|
|
+ pool = Pool()
|
|
+ ModelMultiValue = pool.get('test.model_multivalue')
|
|
+ ModelValue = pool.get('test.model_multivalue.value')
|
|
+
|
|
+ record = ModelMultiValue()
|
|
+ record.save()
|
|
+ record.set_multivalue('value', "test")
|
|
+
|
|
+ value, = ModelValue.search([])
|
|
+ self.assertEqual(value.value_default, "other default")
|
|
+
|
|
@with_transaction()
|
|
def test_get_multivalue(self):
|
|
"Test get_multivalue"
|