当状态为 'confirmed' 时,如何使表单中的所有字段只读?

How to make all fields readonly in a form when the state is 'confirmed'?

当对象的状态更改为“confirmed”时,我需要表单中的所有字段都是只读的。到目前为止,我在每个字段中都输入了attrs = "{'readonly': [('state', '=', 'confirmed')]}",但我想知道是否有任何方法可以使其更优化。

如果你想将该条件应用到模型的每个视图(在 Odoo 的不同部分显示有多个表单视图的模型),最好在 Python 中指定它。在每个字段的定义中,您应该添加 states 参数:

your_field = fields.Whatever(
    ...
    readonly=False,
    states={
        'confirmed': [('readonly', True)],
    }
)

这样,如果用户通过与您修改的视图不同的视图打开模型,如果状态已确认,字段将是只读的,您没有修改也没关系打开视图。

另一方面,如果您只想在特定的表单视图中应用您的目的,您可以做一些比将 attrs 添加到每个字段更快的事情,它会将它添加到标签中包含多个字段,例如 group。这也适用于您并且速度更快:

<group attrs="{'readonly': [('state', '=', 'confirmed')]}">
    <field name="your field_1"/>
    <field name="your field_2"/>
    ...
</group>