如何设置仅可用于组的字段?在odoo9

Mou*_*Tio 2 odoo odoo-9

在上班时间中,有一个名为“ employee_id”的字段。

我想将此字段设置为仅对一个组可编辑(或对其他组设置为只读)。

例如,我只想在“表单”视图中为“经理”组设置字段“ employee_id”可编辑。

我扩展了出勤模块,并在扩展模块的XML中包含以下代码:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
    <record id="view_employee_readonly_custom" model="ir.ui.view">
        <field name="name">hr.attendance.form</field>
        <field name="model">hr.attendance</field>
        <field name="inherit_id" ref="hr_attendance.view_attendance_form"/>
        <field name="groups_id" eval="[(6,0,[ref('base.group_hr_manager')])]"/>
        <field name="arch" type="xml">
            <field name="employee_id" position="attributes">
                <attribute name="readonly">True</attribute>
            </field>
        </field>
    </record>
    </data>
</openerp>
Run Code Online (Sandbox Code Playgroud)

使用此代码,除hr_manager组之外的所有字段都可编辑。那是我想要的相反。

为了达到此目的,我必须修改什么?

编辑:我已经在其他字段中修改了原始代码,以更好地理解。

Mou*_*Tio 5

我找到了!

首先,必须将字段定义为所有人只读。

<xpath expr="//field[@name='employee_id']" position="replace">
     <field name="employee_id" attrs="{'readonly':True}"/>
</xpath>
Run Code Online (Sandbox Code Playgroud)

然后,我们继承第一个自定义视图

<field name="inherit_id" ref="hr_attendance_extend.view_employee_readonly_custom"/>
Run Code Online (Sandbox Code Playgroud)

最后,我们删除管理员组(group_hr_manager)的只读限制

<field name="groups_id" eval="[(6, 0, [ref('base.group_hr_manager')])]"/>
<field name="arch" type="xml">
    <xpath expr="//field[@name='employee_id']" position="attributes">
        <attribute name="readonly">False</attribute>
    </xpath>
</field>
Run Code Online (Sandbox Code Playgroud)

这是最终代码:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
    <record id="view_employee_readonly_custom" model="ir.ui.view">
        <field name="name">hr.attendance.form</field>
        <field name="model">hr.attendance</field>
        <field name="inherit_id" ref="hr_attendance.view_attendance_form"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='employee_id']" position="replace">
                <field name="employee_id" attrs="{'readonly':True}"/>
            </xpath>
        </field>
    </record>

    <record id="view_employee_readonly" model="ir.ui.view">
        <field name="name">hr.attendance.form</field>
        <field name="model">hr.attendance</field>
        <field name="inherit_id" ref="hr_attendance_extend.view_employee_readonly_custom" />
        <field name="groups_id" eval="[(6, 0, [ref('base.group_hr_manager')])]"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='employee_id']" position="attributes">
                <attribute name="readonly">False</attribute>
            </xpath>
        </field>
    </record>
    </data>
</openerp>
Run Code Online (Sandbox Code Playgroud)