当状态为 '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>
当对象的状态更改为“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>