gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:43:44 27 4
gpt4 key购买 nike

我已经安装了模块 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 删除规则并使用属性 active 重新创建它设置为False:

<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, },
)

但是没有成功。我想知道是否有人有比这更好的主意,或者可以告诉我为什么我在此处发布的解决方案均无效。

最佳答案

尝试这段代码并尝试以下操作:

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

当你想更新你的模块时,用 -i 替换 -u 像这样:

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

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

它对我来说很好用,希望对你有帮助。

关于python - 如何从 Odoo 10 中的自定义模块修改 noupdate ="1"XML 记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49917952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com