如何在<filter>域中使用Environnement

时间:2017-06-05 17:16:07

标签: openerp odoo-10

使用Odoo 10(从GitHub提交7413b26,分支10.0),我尝试使用应用于树视图的搜索过滤器域中的环境。像这样:

<filter string="Metal" domain="[('attribute_id','=', self.env['ir.config_parameter'].get_param('my_module.attrib_metal', None))]" help="metal"/>

但是Odoo不允许我使用self

  

NameError:名称'self'未定义

我还尝试通过将结果保存在字段中来过滤我的attrib_metal,但我不想将其存储在我的数据库中,但是Odoo搜索需要它。

在我的Python中:

def get_my_params(self):
    attrid = self.env['ir.config_parameter'].get_param(
            'my_module.attrib_metal', None)
    if attrid:
        for rec in self:
            setattr(rec, attrib_metal, rec.attribute_id.id == int(attrid))

attrib_metal = fields.Boolean(store=False, compute="get_cr_params")

此代码是固有product.attribute.value模型的一部分。

在我的XML视图中:

<filter string="Metal" domain="[('attrib_metal', '=', 'True')]" help="metal"/>

我尝试使用store = True参数,但这样这个值存储在数据库中,只计算一次,这不是我想要的。

所以这不是正确的做法。

如何使用<filter>域中的环境?

1 个答案:

答案 0 :(得分:1)

正在Web客户端(frontend / Javascript)中评估域。 Web客户端对self一无所知。此外,不支持过滤器中的点表示法。 您需要为此创建一个新字段,因为域在javascript端运行,您无法在那里执行代码。新字段还必须存储在数据库中。这种模式遍布Odoo。

使用: <field name="your_field" invisible="1" />将其带到您的视野并使其不可见,然后

<filter string="Metal" domain="[('attribute_id','=', your_field]" help="metal"/>