如何使用环境

问题描述:

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

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

但Odoo不会让我用self

NameError: name 'self' is not defined


我也试图通过保存结果在一个字段筛选我attrib_metal与Python,但我不不想将它存储在我的数据库中,但是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") 

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

在我的XML视图:

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

我已经与store = True参数尝试过,但这样的值存储在数据库中,只计算一次,这是不是我要找对于。

所以这不是正确的做法。


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

+0

'店= FALSE'意味着odoo不会存储领域分贝 –

域正在Web客户端(前端/ Javascript)中进行评估。网络客户端对self一无所知。此外,过滤器中的点符号不受支持。 您需要为这个创建一个新字段,因为这些域在JavaScript端运行,并且您不能在那里执行代码。数据库中的新字段还必须是存储。这种模式遍布于Odoo。

使用: <field name="your_field" invisible="1" />把它带到你的观点,并保持它看不见,然后

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

我已经更新了我的问题澄清我的要求:我想在每次显示时计算字段。但'store = True'只执行一次。 – DamienAuvray

+0

然后,您必须修饰用'api.depends('another_field')'计算字段的方法。所以每当'another_field'改变时,你的字段将被重新计算。如果你希望你的字段在每次显示时重新计算,你必须重写'fields_get'的基本方法并在那里计算字段。恕我直言,这不会是一个好主意。 –

+0

它的工作原理,谢谢。 – DamienAuvray