changeset 5d979ddb683c in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=5d979ddb683c
description:
        Fill Value of MultiValue with the other default values

        issue11077
        review370761002
diffstat:

 trytond/model/multivalue.py      |  11 ++++++++++-
 trytond/tests/multivalue.py      |  13 +++++++++++++
 trytond/tests/test_multivalue.py |  14 ++++++++++++++
 3 files changed, 37 insertions(+), 1 deletions(-)

diffs (89 lines):

diff -r 24c1b56da072 -r 5d979ddb683c trytond/model/multivalue.py
--- a/trytond/model/multivalue.py       Fri Feb 18 13:06:20 2022 +0100
+++ b/trytond/model/multivalue.py       Mon Feb 21 00:52:10 2022 +0100
@@ -2,6 +2,7 @@
 # repository contains the full copyright notices and license terms.
 from trytond.pool import Pool
 
+from .fields import MultiValue
 from .match import MatchMixin
 from .model import Model
 
@@ -33,7 +34,15 @@
                 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 -r 24c1b56da072 -r 5d979ddb683c trytond/tests/multivalue.py
--- a/trytond/tests/multivalue.py       Fri Feb 18 13:06:20 2022 +0100
+++ b/trytond/tests/multivalue.py       Mon Feb 21 00:52:10 2022 +0100
@@ -8,13 +8,25 @@
     "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 @@
         'test.model_multivalue', "Record")
     condition = fields.Char("Condition")
     value = fields.Char("Value")
+    value_default = fields.Char("Value Default")
 
 
 def register(module):
diff -r 24c1b56da072 -r 5d979ddb683c trytond/tests/test_multivalue.py
--- a/trytond/tests/test_multivalue.py  Fri Feb 18 13:06:20 2022 +0100
+++ b/trytond/tests/test_multivalue.py  Mon Feb 21 00:52:10 2022 +0100
@@ -120,6 +120,20 @@
         self.assertEqual(len(ModelValue.search([])), 2)
 
     @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_mutlivalue_setter(self):
         "Test multivalue setter"
         pool = Pool()

Reply via email to