在xml
中,我想同时使用active_id
和ref
作为字段的值context
同时为模型ir.actions.act_window
定义record
。但我只能使用一个,如下面的代码片段所示:
方法 1.仅将ref
与eval
一起使用:
<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>