changeset 1daf4fd5473b in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset;node=1daf4fd5473b
description:
Add context field to on_change calls
Those fields are required to instantiate the fields with the proper
context.
issue9236
review293501002
diffstat:
trytond/model/fields/field.py | 9 +++++++++
trytond/tests/test_field_depends.py | 27 +++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 0 deletions(-)
diffs (68 lines):
diff -r a13c46b2fe81 -r 1daf4fd5473b trytond/model/fields/field.py
--- a/trytond/model/fields/field.py Sun Apr 19 16:32:12 2020 +0200
+++ b/trytond/model/fields/field.py Sun Apr 19 16:36:15 2020 +0200
@@ -453,6 +453,15 @@
if not model.__rpc__[method_name].cache:
changes.append('id')
+ for name in changes:
+ field = model._fields.get(name)
+ if field and field.context:
+ eval_fields = get_eval_fields(field.context)
+ for context_field_name in eval_fields:
+ if (context_field_name in field.depends
+ and context_field_name not in changes):
+ changes.append(context_field_name)
+
name = '%s,%s' % (model.__name__, self.name)
for attr, ttype in [('string', 'field'), ('help', 'help')]:
definition[attr] = ''
diff -r a13c46b2fe81 -r 1daf4fd5473b trytond/tests/test_field_depends.py
--- a/trytond/tests/test_field_depends.py Sun Apr 19 16:32:12 2020 +0200
+++ b/trytond/tests/test_field_depends.py Sun Apr 19 16:36:15 2020 +0200
@@ -3,11 +3,17 @@
import unittest
from trytond.model import ModelView, fields
+from trytond.pyson import Eval
+from trytond.tests.test_tryton import activate_module, with_transaction
class FieldDependsTestCase(unittest.TestCase):
'Test Field Depends'
+ @classmethod
+ def setUpClass(cls):
+ activate_module('tests')
+
def test_empty_depends(self):
'Test depends are set if empty'
@@ -143,6 +149,27 @@
self.assertEqual(Model.name.on_change, {'foo', 'bar'})
+ @with_transaction()
+ def test_field_context(self):
+ "Tests depends on field with context"
+
+ class Model(ModelView):
+ name = fields.Char("Name")
+ foo = fields.Char(
+ "Foo", context={'bar': Eval('bar')}, depends=['bar'])
+ bar = fields.Char("Bar")
+
+ @fields.depends('foo')
+ def on_change_name(self):
+ return
+
+ Model.__setup__()
+ Model.__post_setup__()
+
+ self.assertEqual(
+ set(Model.name.definition(Model, 'en')['on_change']),
+ {'foo', 'bar', 'id'})
+
def suite():
return unittest.TestLoader().loadTestsFromTestCase(FieldDependsTestCase)