在 odoo 17 中,我希望
formview
只能查看而不是根据字段 order_payment_state = done
的值进行编辑。
我不想为每个字段添加
readonly
属性,而是想编写一个 python 函数,继承并修改 get_view 函数,以根据该 readonly
的字段值来 formview
整个表单视图。
请帮我做这件事。
如果您想将表单设为只读,则只需在声明表单时包含
edit="0"
(source),例如
<form edit="0">
<!-- Your form here -->
</form>
否则,如果您确实坚持使用 get_view 来设置所有属性,则应该检查 hr_timesheet 模型的 _get_view 甚至 _apply_time_label 方法(addons/hr_timesheet/model/hr_timesheet.py)。代码几乎全部都在那里,还有一些。 简而言之,我认为您只需要修改 _get_view 方法即可执行以下操作:
@api.model
def _get_view(self, view_id=None, view_type='form', **options):
arch, view = super()._get_view(view_id, view_type, **options)
# Add on conditionals or pull additional data here. E.g. can check if you only want to make certain view_types readonly.
for node in arch.xpath("//field"):
node.set("readonly", "1")
return arch, view
需要注意的是,如果您在 python 中执行此操作并进行部署,则在不删除所述 python 代码的情况下,您将无法使字段可编辑,这与 edit="0" 不同,edit="0" 可以切换 ad-通过 Odoo 的调试菜单进行临时设置,除非那是您想要的。
希望这有帮助。