0

在为 model定义时,xml我想同时使用active_idref作为context字段的值。但我只能使用如下代码片段所示的一个:recordir.actions.act_window

方法 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>

当我尝试active_id在上面的方法 1中使用或包含ref方法 2中时,我收到一条错误消息,指出在第一种情况下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>
4

1 回答 1

1

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

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>
于 2019-12-31T14:59:00.963 回答