diff --git a/trytond/trytond/ir/action.py b/trytond/trytond/ir/action.py index ff111a9ec8..7b8b225f21 100644 --- a/trytond/trytond/ir/action.py +++ b/trytond/trytond/ir/action.py @@ -46,18 +46,23 @@ class ContextError(ValidationError): EMAIL_REFKEYS = set(('cc', 'to', 'subject')) +ACTION_SELECTION = [ + ('ir.action.report', "Report"), + ('ir.action.act_window', "Window"), + ('ir.action.wizard', "Wizard"), + ('ir.action.url', "URL"), + ] class Action(DeactivableMixin, ModelSQL, ModelView): "Action" __name__ = 'ir.action' name = fields.Char('Name', required=True, translate=True) - type = fields.Selection([ - ('ir.action.report', "Report"), - ('ir.action.act_window', "Window"), - ('ir.action.wizard', "Wizard"), - ('ir.action.url', "URL"), - ], "Type", required=True, readonly=True) + type = fields.Selection( + ACTION_SELECTION, "Type", required=True, readonly=True) + action = fields.Function( + fields.Reference("Action", selection=ACTION_SELECTION), + 'get_action') records = fields.Selection([ ('selected', "Selected"), ('listed', "Listed"), @@ -75,6 +80,9 @@ class Action(DeactivableMixin, ModelSQL, ModelView): 'get_action_value': RPC(instantiate=0, cache=dict(days=1)), }) + def get_action(self, name): + return f'{self.type},{self.id}' + @classmethod def default_records(cls): return 'selected' @@ -309,7 +317,8 @@ class ActionMixin(ModelSQL): _action_name = 'name' action = fields.Many2One( - 'ir.action', "Action", required=True, ondelete='CASCADE') + 'ir.action', "Action", + required=True, readonly=True, ondelete='CASCADE') @classmethod def __setup__(cls): diff --git a/trytond/trytond/ir/view/action_form.xml b/trytond/trytond/ir/view/action_form.xml index d1d87ec98d..e404ba6380 100644 --- a/trytond/trytond/ir/view/action_form.xml +++ b/trytond/trytond/ir/view/action_form.xml @@ -10,14 +10,15 @@ this repository contains the full copyright notices and license terms. --> -