Fill Value of MultiValue with the other default values

issue11077
review370761002
This commit is contained in:
Cédric Krier committed 2022-02-21 00:52:10 +01:00
1 parent ec08578767
commit dd58ab653e
3 files changed
+37 -1

No files matched your search

+10 -1
View File
@@ -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 @@ 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)
+13
View File
@@ -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):
+14
View File
@@ -119,6 +119,20 @@ class MultiValueTestCase(unittest.TestCase):
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"