在记录字段中同时使用 ref 和 active_id



xml中,我想同时使用active_idref作为字段的值context同时为模型ir.actions.act_window定义record。但我只能使用一个,如下面的代码片段所示:

方法 1.仅将refeval一起使用:

<record id="some_identifier" model="ir.actions.act_window">
<field name="name">Name</field>
...
<field name="context" eval="{'some_key': ref('module_name.ext_id')}" />
</record>

方法 2.仅使用active_id

<record id="some_identifier" model="ir.actions.act_window">
<field name="name">Name</field>
...
<field name="context">{'search_default_employee_id': active_id}</field>
</record>

当我尝试在方法1中使用active_id或在方法 2中包含ref时,我收到一条错误消息,指出active_id在第一种情况下未定义,ref在第二种情况下未定义

我想要实现的是能够同时使用ref方法和active_id变量。如下所示:

<record id="some_identifier" model="ir.actions.act_window">
<field name="name">Name</field>
...
<field name="context" eval="{'some_key': ref('module_name.ext_id'), 'search_default_employee_id': active_id}" /> <!-- NOTE: Raises an exception -->
</record>
<record id="some_identifier" model="ir.actions.act_window">
<field name="name">Name</field>
...
<field name="context">{'some_key': ref('module_name.ext_id'), 'search_default_employee_id': active_id}</field> <!-- NOTE: Raises an exception -->
</record>

从 v12 开始,Odoo 支持调用模型方法来评估字段值。我们可以利用这种技术ref方法和active_id变量同时使用context变量以下方式。

在所需的任何model中定义如下方法。

from odoo import models, api
from odoo.tools.misc import unquote
class SomeClass(models.Model):
_inherit = 'some_module.model.name'
@api.model
def _using_both_ref_and_active_id(self):
ref = self.env.ref
active_id = unquote("active_id")
return {
'using_ref': ref('external.identifier').id,
'search_default_whatever_filter_name': [active_id],
'default_whatever_field_name': active_id
}

然后在xml访问此method,如下所示:

<record id="action_view_some_id" model="ir.actions.act_window">
<field name="name">Files</field>
...
<field name="context" model="some_module.model.name" eval="obj()._using_both_ref_and_active_id()" />
</record>

最新更新