在Odoo中如何强制覆盖在基本模块中定义的记录规则,并将数据设置为noupdate ='1'?

时间:2016-08-17 11:23:10

标签: openerp odoo-8

以下记录规则在产品模块

中定义
<data noupdate="1">
    <record id="product_comp_rule" model="ir.rule">
        <field name="name" >Product multi-company</field>
        <field name="model_id" ref="model_product_template"/>
        <field name="global" eval="True"/>
        <field name="domain_force"> ['|',('company_id','=',user.company_id.id),('company_id','=',False)]</field>
    </record>
</data>

我想在自定义模块中将其编辑为

<record id="product.product_comp_rule" model="ir.rule">
    <field name="name" >All Products (Parent Company)</field>
    <field name="model_id" ref="product.model_product_template"/>
    <field name="global" eval="True"/>
    <field name="domain_force">['|','|',('company_id','=',user.company_id.id),('company_id','=','False'),('company_id','child_of',[user.company_id.id])] </field>
</record>

3 个答案:

答案 0 :(得分:1)

您可以使用:

<function name="fix_er_role" model="ir.rule"/>

之后将方法添加到ir.rule并修复您的数据

class IRRule(models.Model):
    _inherit = 'ir.rule'

    def fix_er_role(self):
         rol_id = self.env.ref('product.product_comp_rule')
         rol_id = self.env['ir.rule'].search([('id','=',rol_id)])
         rol_id.write({'domain_force':['|','|',('company_id','=',user.company_id.id),('company_id','=','False'),('company_id','child_of',[user.company_id.id])]})
  

升级模块或安装模块时,将调用此方法   在这里你可以通过python代码修复数据。我用过这种方法   它对我有用,希望这对你有帮助。我没有检查我的语法   只是想一想如何做到这一点。

答案 1 :(得分:0)

我们可以使用 noupdate =“0”

以另一种方式进行
<data noupdate="0">
    <record id="product.product_comp_rule" model="ir.rule">
        <field name="name" >All Products (Parent Company)</field>
        <field name="model_id" ref="product.model_product_template"/>
        <field name="global" eval="True"/>
        <field name="domain_force">['|','|',('company_id','=',user.company_id.id),('company_id','=','False'),('company_id','child_of',[user.company_id.id])] </field>
    </record>
</data>

答案 2 :(得分:0)

在Odoo 13中,XML解决方案无需注释即可工作

<function name="write" model="ir.model.data">
    <function name="search" model="ir.model.data">
        <value eval="[('module', '=', 'product'), ('name', '=', 'product_comp_rule')]"/>
    </function>
    <value eval="{'noupdate': False}" />
</function>

<record id="product.product_comp_rule" model="ir.rule">
    <field name="name" >All Products (Parent Company)</field>
    <field name="model_id" ref="product.model_product_template"/>
    <field name="global" eval="True"/>
    <field name="domain_force">['|','|',('company_id','=',user.company_id.id),('company_id','=','False'),('company_id','child_of',[user.company_id.id])] </field>
</record>

<!-- reset noupdate -->
<function name="write" model="ir.model.data">
    <function name="search" model="ir.model.data">
        <value eval="[('module', '=', 'product'), ('name', '=', 'product_comp_rule')]"/>
    </function>
    <value eval="{'noupdate': True}" />
</function>

该问题已经由其他人https://github.com/odoo/odoo/issues/45592

报告过