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

Odoo Qweb报表动态rowspan导致表格列越界问题求助

Odoo Qweb报表动态rowspan列错位修复方案

问题根源

当同一Name值的后续行循环时,代码未为Name列生成空的<td>占位,导致该行实际列数比表头少1,浏览器渲染时出现列错位、越界。

修复代码

修改<tbody>内的循环逻辑,为重复Name的行添加Name列的空td占位:

<table class="table-metal">
    <thead>
        <tr>
            <th style="text-transform: none;width:20%">Name</th>
            <th style="text-transform: none;width:30%">Width</th>
            <th style="text-transform: none;width:20%">Mark</th>
            <th style="text-transform: none;width:20%">Standard</th>
            <th style="text-transform: none;width:10%">Number</th>
        </tr>
    </thead>
    <tbody>
        <t t-set="node_name_value" t-value="noname"/>
        <t t-foreach="doc.passport_metal_ids" t-as="metal_ids">
            <tr>
                <!-- Name列:值变化时生成带rowspan的td,否则生成空td占位 -->
                <t t-if="metal_ids.product_name.name != node_name_value">
                    <t t-set="count" t-value="doc.get_count_row(metal_ids.product_name.name)"/>
                    <td valign="top" t-att-rowspan="count"><span t-field="metal_ids.product_name.name" /></td>
                </t>
                <t t-else="">
                    <td style="display: none;"></td> <!-- 空td占位,保证列数与表头一致 -->
                </t>
                <!-- Width列逻辑保持不变 -->
                <t t-if="metal_ids.brand_id.name[0] == 'S'">
                    <td>Лист S=<span t-esc="metal_ids.size_id.name.split('x')[0]" /></td>
                </t>
                <t t-else="">
                    <td>Лист B-PN-0 S=<span t-esc="metal_ids.size_id.name.split('x')[0]" /><br></br>ГОСТ 19903-74 </td>
                </t>
                <td><span t-field="metal_ids.brand_id.name" /></td>
                <td><span t-field="metal_ids.gost_id.name" /></td>
                <td><span t-field="metal_ids.certificate" /></td>
                <t t-set="node_name_value" t-value="metal_ids.product_name.name"/>
            </tr>
        </t>
    </tbody>
    <tfoot>
        <tr>
            <td colspan="5"></td>
        </tr>
    </tfoot>
</table>
<p style="page-break-after:always;"></p>

关键说明

  • 空td添加display: none,既避免显示多余边框或空白,又保证每行的td数量与表头的5列完全匹配
  • 需确保get_count_row方法返回的rowspan数值准确(即同一Name对应的总行数),否则会导致后续行的占位td数量错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:50:23