1

希望你们一切都好,gday。

所以我继承了一个date_donestock.picking模型中调用的字段,它readonly:true默认具有属性。readonly but not in 'assigned' status我在下面的代码中为所有 Odoo 用户撤销了它:

<field name="date_done" groups="base.group_user" position="attributes" >
    <attribute name="attrs">{'readonly':[('state','not in',('assigned'))],'invisible':['|',('state','not in',('assigned','done'))]}</attribute>
</field>

然后,我想添加一个称为change_date_group_privilege稍后将具有readonly but not in 'assigned' + 'done' status属性的组。

最后,我希望base.group_user只有在状态时才能更改字段is not in assigned,并且change_date_group_privilege能够在状态时更改is not in assigned + done

我不能简单地添加change_date_group_privilegeinto groups="base.group_user",因为我还需要在'done'里面添加 status readonly':[('state','not in',('assigned'))],稍后也会提供base.group_user我不想要的特权。

如何在这个 XML 代码块中添加条件?如果有其他方法,我会很高兴通过它。

感谢您的帮助。

4

2 回答 2

2

您可以在表单视图中多次使用一个字段,并使用该属性分别为内部用户和特权用户定义groups属性。

检查语义组件的表单视图文档:

呈现(并可能允许编辑)当前记录的单个字段。Using
several times a field in a form view is supported并且字段可以接收
修饰符“invisible”和“readonly”的不同值。
但是,当存在多个具有不同修饰符 'required' 值的字段时,不能保证该行为。

!如果用户不属于该组,您可以在组之前使组件不可见。

例子:

<field name="date_done" position="replace">
    <label for="date_done"/>
    <div>
        <div groups="!MODULE_NAME.change_date_group_privilege">
            <field name="date_done" 
                   attrs="{'readonly':[('state','not in',('assigned'))]}"/>
        </div>
        <div groups="MODULE_NAME.change_date_group_privilege">
            <field name="date_done" 
                   attrs="{'readonly':[('state','not in',('assigned', 'done'))]}"/>
        </div>
    </div>
</field>

请注意,Odoo 将在使用字段标签上的组属性时使用最后一个字段的值

以下域(用于attrs域):

['|',('state','not in',('assigned','done'))]  

是错误的,因为|有 2 个(需要两个标准)

于 2022-01-28T15:43:08.443 回答
1

假设:

  • 您有两个级别的访问组
  • 一个普通组(通常是base.group_user“内部用户”)
  • 和一个特殊的组“完成后更改选择日期”,带有 idmy_module.group_change_date_when_done

所以正常的 Picking 视图看起来像这样(简短的例子!)

<record id="default_view" model="ir.ui.view">
    <field name="name">default example view</field>
    <field name="model">stock.picking</field>
    <field name="arch" type="xml">
        <form>
            <field name="date_done" readonly="1" />
            <field name="state" />
        </form>
    </field>
</record>

现在的需求是希望普通用户有可能date_done在状态不改变的情况下改变字段assigned。因此,您为每个普通用户扩展和更改视图(视图中不需要组)。

<record id="default_view_extension_level1" model="ir.ui.view">
    <field name="name">default example view</field>
    <field name="model">stock.picking</field>
    <field name="inherit_id" ref="default_view" />
    <field name="arch" type="xml">
        <field name="date_done" position="attributes">
            <attribute name="readonly" />
            <attribute name="attrs">{'readonly':[('state','not in',('assigned'))]</attribute>
        </field>
    </field>
</record>

现在您可以在上面设置视图,然后将特殊组添加到其中。这将导致仅对该特殊组中的用户使用该特殊视图。

<record id="default_view_extension_level2" model="ir.ui.view">
    <field name="name">default example view</field>
    <field name="model">stock.picking</field>
    <field name="inherit_id" ref="default_view_extension_level1" />
    <field name="groups_id" eval="[(4, ref('my_module.group_change_date_when_done'))]"/>
    <field name="arch" type="xml">
        <field name="date_done" position="replace">
            <field name="date_done" attrs="{'readonly':[('state','not in',('done', 'assigned'))]" />
        </field>
    </field>
</record>

最后,普通用户将加载前两个视图,特殊用户还将加载第三个视图,这将导致他们在完成状态下更改完成日期。

请记住:该代码只是显示扩展原理和在视图上使用组的示例代码。不保证有效!

于 2022-01-28T14:25:00.223 回答