如何从Odoo 10中的自定义模块修改noupdate =“1”XML记录?

时间:2018-04-19 09:49:34

标签: python xml odoo odoo-10

我安装了模块project,该模块使用XML ID task_visibility_rule创建规则。现在我想从我自己的模块中使这个规则失效。问题是该规则是在<data noupdate="1">标记内声明的,因此,更新该规则的任何XML记录都无效。

所以我正在尝试修改规则并将其设置为noupdate="0",然后才能使其处于非活动状态:

<!-- Find the corresponding "to be inherited record" with noupdate="1" -->
<function name="write" model="ir.model.data">
    <function name="search" model="ir.model.data">
        <value eval="[('module', '=', 'project'), ('name', '=', 'task_visibility_rule')]"/>
    </function>

    <!-- Set noupdate to False -->
    <value eval="{'noupdate': False}"/>
</function>

<!-- Finish the job, disabling the existing rule -->
<record model="ir.rule" id="project.task_visibility_rule">
    <field name="model_id" ref="project.model_project_task"/>
    <field name="active" eval="False"/>
</record>

<!-- Optional, if you want to set noupdate to True again -->
<function name="write" model="ir.model.data">
    <function name="search" model="ir.model.data">
        <value eval="[('module', '=', 'project'), ('name', '=', 'task_visibility_rule')]"/>
    </function>

    <!--Set noupdate to True-->
    <value eval="{'noupdate': True}"/> 
</function>

我尝试过上面的代码并没有成功。我还尝试通过XML删除规则并使用设置为 False 的属性active重新创建规则:

<delete id="project.task_visibility_rule" model="ir.rule"/>

<record model="ir.rule" id="project.task_visibility_rule">
    <field name="name">Project/Task: employees: follow required for follower-only projects</field>
    <field name="model_id" ref="model_project_task"/>
    <field name="domain_force">[
    '|',
        ('project_id.privacy_visibility', '!=', 'followers'),
        '|',
            ('project_id.message_partner_ids', 'in', [user.partner_id.id]),
            '|',
                ('message_partner_ids', 'in', [user.partner_id.id]),
                # to subscribe check access to the record, follower is not enough at creation
                ('user_id', '=', user.id)
    ]</field>
    <field name="groups" eval="[(4,ref('base.group_user'))]"/>
    <field name="active" eval="False"/>
</record>

但似乎规则甚至没有删除,因为它保留了相同的数据库ID。

然后我尝试从XML调用我自己的Python函数,并通过Python代码进行我想要的修改:

<function name="disable_project_task_visibility_rule" model="project.task"/>

project.task模型中我有:

@api.model
def disable_project_task_visibility_rule(self):
    rule = self.env.ref('project.task_visibility_rule')
    return rule.write(
        {'active': False, },
    )

但没有成功。我想知道某人是否有比这更好的想法,或者可以告诉我为什么我这里发布的解决方案都无效。

1 个答案:

答案 0 :(得分:0)

尝试此代码,然后尝试以下操作:

<data noupdate="0"> 
<record model="ir.rule" id="project.task_visibility_rule">
    <field name="name">Project/Task: employees: follow required for follower-only projects</field>
    <field name="model_id" ref="model_project_task"/>
    <field name="domain_force">[
    '|',
        ('project_id.privacy_visibility', '!=', 'followers'),
        '|',
            ('project_id.message_partner_ids', 'in', [user.partner_id.id]),
            '|',
                ('message_partner_ids', 'in', [user.partner_id.id]),
                # to subscribe check access to the record, follower is not enough at creation
                ('user_id', '=', user.id)
    ]</field>
    <field name="groups" eval="[(4,ref('base.group_user'))]"/>
    <field name="active" eval="False"/>
</record>
</data>

要更新模块时,将-u替换为-i,如下所示:

./odoo-bin  --addons-path=addons,../custom/addons/ -u your_module

./odoo-bin  --addons-path=addons,../custom/addons/ -i your_module

对我来说很好,希望对您有帮助。