如何根据字段在 Odoo 17 中将所有表单字段设置为只读?

问题描述 投票:0回答:1

在 odoo 17 中,我希望

formview
只能查看而不是根据字段
order_payment_state = done
的值进行编辑。

我不想为每个字段添加

readonly
属性,而是想编写一个 python 函数,继承并修改 get_view 函数,以根据该
readonly
的字段值来
formview
整个表单视图。

请帮我做这件事。

python field readonly formview odoo-17
1个回答
0
投票

如果您想将表单设为只读,则只需在声明表单时包含

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 的调试菜单进行临时设置,除非那是您想要的。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.