diff --git a/trytond/trytond/ir/action.py b/trytond/trytond/ir/action.py index 6ed796b8f7..dd2035210c 100644 --- a/trytond/trytond/ir/action.py +++ b/trytond/trytond/ir/action.py @@ -345,7 +345,11 @@ class ActionMixin(ModelSQL): action = fields.Many2One( 'ir.action', "Action", - required=True, readonly=True, ondelete='CASCADE') + required=True, ondelete='CASCADE', + states={ + 'required': Eval('id', -1) >= 0, + 'readonly': Eval('id', -1) >= 0, + }) @classmethod def __setup__(cls): @@ -456,8 +460,9 @@ class ActionMixin(ModelSQL): values = values.copy() for field in values: if field in Action._fields: - action_values[field] = values[field] - if hasattr(getattr(cls, field), 'set'): + if field != 'action': + action_values[field] = values[field] + elif hasattr(getattr(cls, field), 'set'): later[field] = values[field] for field in later: del values[field] @@ -468,7 +473,7 @@ class ActionMixin(ModelSQL): if database.nextid(transaction.connection, cls._table): database.setnextid(transaction.connection, cls._table, database.currid(transaction.connection, Action._table)) - if 'action' not in values: + if not values.get('action'): action, = Action.create([action_values]) values['action'] = action.id else: