如何在 Odoo12 中覆盖现有的 res.groups 模型组?

How to override an existing group of res.groups model in Odoo12?

我需要覆盖自定义模块中的现有组,并仅更改另一个自定义模块中的 implied_ids 字段。我试图在我的模块中使用相同的代码,并在 implied_ids 中进行更改,但出现以下错误。然后我尝试使用 inherit_id 字段但再次引发重复 ID 错误。 Bellow 是自定义模块中的原始组:

<record id="group_hms_jr_doctor" model="res.groups">
            <field name="name">Jr Doctor</field>
            <field name="category_id" ref="module_category_hms"/>
            <field name="implied_ids" eval="[(4, ref('acs_hms.group_hms_nurse')),(4, ref('acs_hms.group_hms_receptionist'))]"/>
            <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
        </record>

我只想从中删除 (4, ref('acs_hms.group_hms_receptionist')) 部分。我试过下面的代码,但出现了这个错误。

odoo.tools.convert.ParseError: "duplicate key value violates unique constraint "res_groups_name_uniq"
DETAIL:  Key (category_id, name)=(68, Jr Doctor) already exists.
" while parsing /home/ibrahim/workspace/odoo/hms/nl_hms/security/security.xml:5, near
<record id="group_hms_jr_doctor_inherited" model="res.groups">
        <field name="name">Jr Doctor</field>
        <field name="inherit_id" ref="acs_hms.group_hms_jr_doctor"/>
        <field name="category_id" ref="acs_hms.module_category_hms"/>
        <field name="implied_ids" eval="[(4, ref('acs_hms.group_hms_nurse'))]"/>
        <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
    </record>

如何覆盖任何现有组并对其进行更改?

您必须将另一个自定义模块设置为自定义模块中的依赖项,然后通过在 record 节点中使用完整的外部 ID,仅 "override" 需要的值。

<record id="acs_hms.group_hms_jr_doctor" model="res.groups">
    <field name="implied_ids" eval="[(3, ref('acs_hms.group_hms_nurse'))]"/>
</group>

要更新现有记录,您应该提供该记录的完整 XML-ID(包括应用名称),并使用 3 command 从 many2many 字段中删除项目,这将从 x2many 字段中删除项目但不从数据库中删除它:

<record id="acs_hms.group_hms_jr_doctor" model="res.groups">
    <field name="implied_ids" eval="[(3, ref('acs_hms.group_hms_receptionist'))]"/>
</group>

这里会发生的是 Odoo 将在 res.groups 上调用 write 并且 4 命令用于将记录添加到 x2many 字段这不会影响字段都是因为记录都准备好了。