You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Odoo 17中根据字段值设置整个表单视图为只读?

Odoo 17 实现表单视图根据字段值全局只读

要实现当order_payment_state字段值为done时,表单视图整体只读,无需逐个字段设置readonly属性,可以通过继承模型的get_view方法动态修改视图架构,具体实现如下:

代码实现

from odoo import models, api

class YourModel(models.Model):
    _inherit = 'your.model'  # 替换为实际要继承的模型,比如'sale.order'

    @api.model
    def get_view(self, view_id=None, view_type='form', **options):
        view = super().get_view(view_id=view_id, view_type=view_type, **options)
        
        # 仅针对表单视图,且当前存在已有记录(排除新建场景)
        if view_type == 'form' and self and self.order_payment_state == 'done':
            # 动态给<form标签添加readonly属性,实现整体只读
            view['arch'] = view['arch'].replace('<form', '<form readonly="1"')
        
        return view

关键说明

  • 替换代码中的'your.model'为你实际需要处理的业务模型(例如销售订单用'sale.order')
  • 逻辑中加入self判断,确保仅在查看已有记录时生效,不影响新建订单的编辑权限
  • 如果需要保留部分按钮的可操作权限,可以在视图XML中给对应按钮单独设置readonly="0",覆盖全局只读设置

内容的提问来源于stack exchange,提问作者Cris Tuan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:49:49