我安装了模块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, },
)
但没有成功。我想知道某人是否有比这更好的想法,或者可以告诉我为什么我这里发布的解决方案都无效。
答案 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
对我来说很好,希望对您有帮助。