odoo 报告打印对象值

odoo report print object value

我是 odoo 的新手,学习了一些与报告相关的知识。我正在查看选股报告。我注意到它有一个名为 "docs" 的对象,值存储在该对象中。 因为我来自 PHP 背景,所以可以打印接收到的用于调试目的的对象,如下所示:

<?php print_r("object"); ?>

所以我尝试使用以下代码使用 QWeb 模板在 odoo 中打印相同的内容:

1. <t t-esc="docs" />
2. <t t-foreach="docs" t-as="o">
      <t t-esc="o" />
3. <t t-foreach="docs" t-as="o">
      <t t-esc="o_all" />
4. <t t-foreach="docs" t-as="o">
      <t t-esc="o_value" />
5. <t t-foreach="docs" t-as="o">
      <t t-esc="o_all" />

但是我无法打印整个对象,我只得到 stock.picking(1,) 有人可以帮助我如何在 qweb 模板中看到带有键和值的整个对象。此外,有人可以指导我定义此对象 "docs" 的位置。

非常感谢。

谢谢,

stock.picking(1,) 是单个对象,因此它没有字典所具有的键和值。所以我想你想看到的是对象的属性,比如 id、name 等等

你可以通过使用 dir 函数来做到这一点,这相当于 php 中对象的 print_r (不是真的),

<t t-foreach="docs" t-as="o">
    <t t-esc="dir(o)" />

这将打印出对象具有的所有属性,如果你想查看特定属性,如 id,你可以这样做

<t t-foreach="docs" t-as="o">
    <t t-esc="o.id" />

dir 提供了更多信息,但您仍然可以通过一些小的修改获得与 php 的 print_r 相同的行为。例如

class Example:
    whatever = 'whatever attribute'
    something = 'something attribute'

ex = Example()

print({attribute: getattr(ex, attribute) for attribute in dir(ex) if not attribute.startswith('__')})

这里我使用字典推导来遍历 dir 返回的对象的所有属性,然后我使用 if 语句去除 dir 给我们的对象的所有额外信息,通常以两个下划线开头 (__).

因此输出是一个以对象属性为键的字典,值是这些属性的内容

{'whatever': 'whatever attribute', 'something': 'something attribute'}

未经本人测试。但这也适用于 QWeb

<t t-foreach="docs" t-as="o">
    <t t-esc="{attribute: getattr(o, attribute) for attribute in dir(o) if not attribute.startswith('__')}" />

有时我们有点迷茫如何在网站Odoo v12中打印特定对象的字段,您可以使用简单的代码来显示整个字段。这是我为对象论坛做的:

<t t-foreach="forums.sorted(reverse=True)" t-as="forum">
   <t t-esc="forum._fields" />
</t>

根据@Diderh 的回答,了解如何显示对象的每个属性及其相关值:

<table>
    <t t-foreach="product._fields" t-as="field">
        <tr>
            <td>
                <t t-esc="field" />
            </td>
            <td>
                <t t-esc="product[field]" />
            </td>
        </tr>
    </t>
</table>