@@ -87,27 +87,48 @@ def onchange(self, values, field_names, fields_spec):
8787 server_action = self .env ["ir.actions.server" ].sudo ().browse (server_action_id )
8888 if not server_action :
8989 return super ().onchange (values , field_names , fields_spec )
90- dynamic_fields = {}
9190
91+ # Collect dynamic field names to filter them out
92+ dynamic_field_names = set ()
9293 for line in server_action .mapped ("mass_edit_line_ids" ):
93- values ["selection__" + line .field_id .name ] = "ignore"
94- values [line .field_id .name ] = False
95-
96- # Make sure there is an entry for the default value retrieved above.
97- dynamic_fields ["selection__" + line .field_id .name ] = fields .Selection (
98- [("ignore" , _ ("Don't touch" ))], default = "ignore"
99- )
100- dynamic_fields [line .field_id .name ] = fields .Text ([()], default = False )
94+ selection_field = "selection__" + line .field_id .name
95+ field_name = line .field_id .name
96+ dynamic_field_names .add (selection_field )
97+ dynamic_field_names .add (field_name )
98+
99+ # Set default values for dynamic fields
100+ if selection_field not in values :
101+ values [selection_field ] = "ignore"
102+ if field_name not in values :
103+ values [field_name ] = False
104+
105+ # Filter out dynamic fields before calling super
106+ filtered_values = {
107+ key : value
108+ for key , value in values .items ()
109+ if key not in dynamic_field_names
110+ }
111+ filtered_field_names = [
112+ fname for fname in field_names if fname not in dynamic_field_names
113+ ]
114+ filtered_fields_spec = {
115+ fname : spec
116+ for fname , spec in fields_spec .items ()
117+ if fname not in dynamic_field_names
118+ }
101119
102- self ._fields .update (dynamic_fields )
120+ res = super ().onchange (
121+ filtered_values , filtered_field_names , filtered_fields_spec
122+ )
103123
104- res = super ().onchange (values , field_names , fields_spec )
105- if not res ["value" ]:
106- value = {key : value for key , value in values .items () if value is not False }
107- res ["value" ] = value
124+ # Ensure dynamic field values are included in the response
125+ if not res .get ("value" ):
126+ res ["value" ] = {}
108127
109- for field in dynamic_fields :
110- self ._fields .pop (field )
128+ # Add dynamic field values to the result
129+ for field_name in dynamic_field_names :
130+ if field_name in values :
131+ res ["value" ][field_name ] = values [field_name ]
111132
112133 view_temp = (
113134 self .env ["ir.ui.view" ]
0 commit comments