odoo report значение объекта печати

Я новичок в odoo и немного узнаю, что касается отчетности. Я просматривал отчет о сборе акций. Я заметил, что у него есть объект под названием «docs», и значения хранятся внутри этого объекта. так как я из фона PHP, есть возможность распечатать объект, полученный для отладки, следующим образом:

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

Поэтому я попытался напечатать то же самое в odoo, используя шаблон QWeb, используя следующие коды:

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. Более того, может кто-нибудь подсказать мне, где определяется этот объект «документы».

Я буду очень признателен.

Спасибо,


person user280960    schedule 01.06.2016    source источник


Ответы (3)


stock.picking(1,) - это единый объект, поэтому у него нет ключей и значений, которые есть в словарях. поэтому я предполагаю, что вы хотите видеть атрибуты объекта, такие как идентификатор, имя и т. д.

вы можете сделать это с помощью функции dir, что эквивалентно print_r для объекта в php (не совсем),

<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 дает гораздо больше информации, но вы все равно можете добиться того же поведения, что и print_r php, с некоторыми небольшими изменениями. Например

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('__')}" />
person danidee    schedule 02.06.2016
comment
Выполнение t-esc="dir(product)" дает мне ошибку: "'NoneType' object is not callable" while evaluating dir(product) - person ruuter; 27.09.2016
comment
Что такое product? как у вас product по сравнению с исходным вопросом, который был задан? - person danidee; 27.09.2016
comment
Примерно так же. t-esc="product" дает product.template(31,). Однако использование dir() приведет к упомянутой выше ошибке. - person ruuter; 28.09.2016
comment
t-esc="dir(o)"? а также какую ошибку вы получаете ... вам может потребоваться задать новый вопрос и предоставить более подробную информацию - person danidee; 28.09.2016
comment
Ошибка, которую я получаю, написана в моем первом комментарии. Объект product не важен. Я получаю ту же ошибку без объекта: <t t-esc="dir()"/>, помещая это в любой шаблон. - person ruuter; 28.09.2016

Иногда мы немного теряемся в том, как печатать поля для определенного объекта на веб-сайте Odoo v12, вы можете использовать простой код для отображения целых полей. Вот как я это сделал для Object Forum:

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

Основываясь на ответе @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>
person Than    schedule 03.01.2020