代码之家  ›  专栏  ›  技术社区  ›  Dayana

当状态为“已确认”时,如何使窗体中的所有字段均为只读?

  •  3
  • Dayana  · 技术社区  · 6 年前

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   forvas    6 年前

    如果要将该条件应用于模型的每个视图(在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>