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)

Reply via email to