odoo报告打印对象值

时间:2016-06-01 18:55:57

标签: openerp qweb

我是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模板中使用键和值查看整个对象。此外,有人可以指导我这个对象&#34; docs&#34;是定义。

我真的很感激。

谢谢,

3 个答案:

答案 0 :(得分:1)

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

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

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

这将打印出该对象具有的所有属性,如果您想查看特定属性,例如您可以执行此操作

<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('__')}" />

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

根据@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>