odoo sever action 中报错:<type 'exceptions.NameError'>: "name 'self' is not defined" while evaluating u'self....

admin 2019-5-5 6141

在odoo12中,脚手架自动生成的server action 示例如下:

    <record model="ir.actions.server" id="todo1.action_server">
      <field name="name">todo1 server</field>
      <field name="model_id" ref="model_todo1_todo1"/>
      <field name="state">code</field>
      <field name="code">
        action = {
          "type": "ir.actions.act_window",
          "view_mode": "tree,form",
          "res_model": self._name,
        }
      </field>
    </record>


,但执行时却报错:

Odoo Server Error

Traceback (most recent call last):
  File "F:\Odoo\GOdoo12_Ent\source\odoo\tools\safe_eval.py", line 350, in safe_eval
    return unsafe_eval(c, globals_dict, locals_dict)
  File "", line 4, in <module>
NameError: name 'self' is not defined

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "F:\Odoo\GOdoo12_Ent\source\odoo\http.py", line 654, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "F:\Odoo\GOdoo12_Ent\source\odoo\http.py", line 312, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "F:\Odoo\GOdoo12_Ent\source\odoo\tools\pycompat.py", line 87, in reraise
    raise value
  File "F:\Odoo\GOdoo12_Ent\source\odoo\http.py", line 696, in dispatch
    result = self._call_function(**self.params)
  File "F:\Odoo\GOdoo12_Ent\source\odoo\http.py", line 344, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "F:\Odoo\GOdoo12_Ent\source\odoo\service\model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "F:\Odoo\GOdoo12_Ent\source\odoo\http.py", line 337, in checked_call
    result = self.endpoint(*a, **kw)
  File "F:\Odoo\GOdoo12_Ent\source\odoo\http.py", line 939, in __call__
    return self.method(*args, **kw)
  File "F:\Odoo\GOdoo12_Ent\source\odoo\http.py", line 517, in response_wrap
    response = f(*args, **kw)
  File "f:\odoo\godoo12_ent\source\odoo\addons\web\controllers\main.py", line 1268, in run
    result = request.env['ir.actions.server'].browse([action_id]).run()
  File "f:\odoo\godoo12_ent\source\odoo\addons\base\models\ir_actions.py", line 566, in run
    res = func(action, eval_context=eval_context)
  File "f:\odoo\godoo12_ent\source\odoo\addons\base\models\ir_actions.py", line 442, in run_action_code_multi
    safe_eval(action.sudo().code.strip(), eval_context, mode="exec", nocopy=True)  # nocopy allows to return 'action'
  File "F:\Odoo\GOdoo12_Ent\source\odoo\tools\safe_eval.py", line 373, in safe_eval
    pycompat.reraise(ValueError, ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr)), exc_info[2])
  File "F:\Odoo\GOdoo12_Ent\source\odoo\tools\pycompat.py", line 86, in reraise
    raise value.with_traceback(tb)
  File "F:\Odoo\GOdoo12_Ent\source\odoo\tools\safe_eval.py", line 350, in safe_eval
    return unsafe_eval(c, globals_dict, locals_dict)
  File "", line 4, in <module>
ValueError: <class 'NameError'>: "name 'self' is not defined" while evaluating
'action = {\n          "type": "ir.actions.act_window",\n          "view_mode": "tree,form",\n          "res_model": self._name,\n        }'

出现这个错误,是因为执行server action时无法获取到self对象,必须改成:

    <record model="ir.actions.server" id="todo1.action_server">
      <field name="name">todo1 server</field>
      <field name="model_id" ref="model_todo1_todo1"/>
      <field name="state">code</field>
      <field name="code">
        action = {
          "type": "ir.actions.act_window",
          "view_mode": "tree,form",
          "res_model": model._name,
        }
      </field>
    </record>


最新回复 (0)
返回