使用 python 在 odoo qweb 报告中动态创建和更新 table 行和列

Dynamically create and update table rows and columns in odoo qweb report with python

我将上面的 table 作为我的 qweb 报告的最终输出。这个table应该是动态生成的。

你需要什么样的数据结构来表示这个数据,使得当前为零的 table 单元格的值等于拆分变量后的值。

我想要这样,如果你有一个变量 m-x = 20col mrow x 处的 table 单元格将等于 20 等等在。如果没有这样的组合,则 table 单元格等于 0。

请让我知道这是否有意义,并可能需要任何说明。 谢谢!

这就是我现在正在做的事情。不确定我的方向是否正确。 正在从制造模型打印报告。我搜索了库存中的产品移动,寻找其来源或参考与制造订单名称匹配的所有移动。

然后我获取 lot_id 的名字,加入字典中的键并检查它们是否匹配,然后我更新值。

size = {
            'u/s': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0}
            'w': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0}
            'bhl': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0}
        }
for output in self.env['stock.move.line'].search(['|', ('origin', '=', docs.name), ('reference', '=', docs.name)]):
    lot_id = output.lot_id.name
        for i in size:
            for j in size[i]:
                if (j+'-'+i) == lot_id:
                   i[j] = output.qty_done

我通过使用字典来完成这项工作。

Python代码:

size = {
            'u/s': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'w': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'bhl': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'bhp': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'rhl': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'rhp': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'yhl': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'yhp': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            'stains': {'mp/sup': 0, 'tr': 0, 'd2':0,'v':0,'v1':0,'d/rej':0},
            
        }
        
for output in self.env['stock.move.line'].search(['|', ('origin', '=', docs.name), ('reference', '=', docs.name)]):
    lot_id = output.lot_id.name
    if lot_id:
       for i in size:
           for j in size[i]:
               if (f"{j}-{i}") == lot_id.lower():
                   size[i][j] = output.qty_done

Xml代码:

<thead>
    <tr>
      <th>SIZE</th>
      <th>MP/SUP</th>
      <th>TR</th>
      <th>D2</th>
      <th>V</th>
      <th>V1</th>
      <th>D/REJ</th>
      <th>TOTAL</th>
      <th>PERCENTAGE (%)</th>
    </tr>
  </thead>
  <tbody>
     <t t-foreach="size" t-as="i">
         <tr>
            <th>
               <t t-esc="i.upper()" />
            </th>
         <t t-foreach="size[i]" t-as="j">
            <td>
               <t t-esc="size[i][j]" />
            </td>
         </t>
       </tr>
     </t>
 </tbody>

Ps。 Pandas 似乎是完成任务的一种非常快捷的方法。