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

如何在Odoo报表文件中根据Tree View字段属性设置显示条件?

解决方案

要实现Tree View字段的optional属性控制QWeb报表字段的显示/隐藏,核心是先从视图定义中读取字段属性,再在报表中做条件判断,具体步骤如下:

1. 在模型中添加方法读取视图字段属性

首先通过Odoo的ir.ui.view模型获取目标Tree View的结构,解析出字段的optional属性值:

from lxml import etree
from odoo import models

class YourModel(models.Model):
    _inherit = 'your.model'  # 替换为实际业务模型名

    def get_field_optional_state(self, field_name, tree_view_id):
        """获取指定Tree View中字段的optional属性状态"""
        view = self.env['ir.ui.view'].browse(tree_view_id)
        if not view.arch:
            return False
        # 解析视图XML结构
        arch_root = etree.fromstring(view.arch)
        # 定位目标字段节点
        field_node = arch_root.xpath(f"//field[@name='{field_name}']")
        if field_node:
            # 返回该字段是否设置了optional='hide'
            return field_node[0].get('optional') == 'hide'
        return False

2. 在报表上下文预计算状态(可选但更高效)

在报表对应的Python类中,预计算字段状态,避免模板中重复查询:

from odoo import models

class YourReport(models.AbstractModel):
    _name = 'report.your_module.your_report_template'  # 替换为实际报表模板名
    _inherit = 'report.report_abstract'  # 若为Excel报表则替换为'report.report_xlsx.abstract'

    def _get_report_values(self, docids, data=None):
        docs = self.env['your.model'].browse(docids)
        # 获取目标Tree View的ID(替换为你的Tree View的XML ID)
        target_tree_view = self.env.ref('your_module.test_tree_view')
        # 为每个记录添加字段状态属性
        for doc in docs:
            doc.test_field_is_hidden_in_tree = doc.get_field_optional_state('test', target_tree_view.id)
        return {
            'doc_ids': docids,
            'doc_model': 'your.model',
            'docs': docs,
        }

3. 在QWeb报表模板中添加条件判断

根据需求选择对应的判断逻辑:

需求逻辑:字段带optional='hide'则报表隐藏,否则显示

<t t-if="not doc.test_field_is_hidden_in_tree">
    <span t-out="doc.test"/>
</t>

你的预期逻辑:Tree View设置字段隐藏(optional='hide')时,报表显示

<t t-if="doc.test_field_is_hidden_in_tree">
    <span t-out="doc.test"/>
</t>

内容的提问来源于stack exchange,提问作者Ahmed Hamed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:23:32