0

我一直在为 Odoo 15 开发几个模块。但我无法理解的是如何在后端/Web 客户端内以更自定义的方式格式化某些类型的信息。

下面的示例是我尝试使用的那种格式的简化版本(我也认为parent_id是保留名称,实际上不能使用,但它使示例更清晰)。

假设我有三个模型:ModelA, ModelB, ModelC

ModelA可以有 x 个类型的子对象ModelB,并且ModelB可以有 x 个类型的子对象ModelC。这些子对象也指向它们的父对象:

    # ModelA
    child_ids = fields.One2many("mymodule.ModelB", "parent_id") # link to multiple children
    
    # ModelB
    parent_id = fields.Many2one("mymodule.ModelA") # link to single parent
    child_ids = fields.One2many("mymodule.ModelC", "parent_id") # link to multiple children
    
    # ModelC
    parent_id = fields.Many2one("mymodule.ModelB") # link to single parent

如果我想在 Web 客户端中以表单形式显示它,我可以执行类似的操作

<field name="child_ids">
    <tree create="0" delete="0" edit="0">
        <field name="name" />
    </tree>
</field>

生成一个仅显示每个孩子姓名的简单列表,或用于<field name="child_ids" widget="many2many_tags" />创建内联标记样式对象。

child_ids但是,如果我想以更图形化的方式显示数据,如何访问数据。例如,假设我想生成某种嵌套框,其中为每个对象绘制一个 div,其中包含其子项的 div:

显示模型之间关系的表格

在其他框架中,我会编写类似(伪代码)的东西:

    {{ for obj_a in a_objects }}
        <div>
        <h1>obj_a.name</h1>
        {{ for obj_b in obj_a.children }}
            <div>
            <h2>obj_b.name</h2>
            {{ for obj_c in obj_b.children }}
                <div>
                <h3>obj_c.name</h3>
                </div>
            {{ endfor }}}
            </div>
        {{ endfor }}
        </div>
    {{ endfor }}

我认为可以使用不同的 t 指令完成类似的操作:

   <div t-foreach="child_ids" t-as="child">
       <h2><t t-out="child.name" /><h2>
   </div>

但是Many2one关系字段不是对象列表,不能像这样迭代。

我错过了什么?如何以允许我在自己的布局中显示信息但仍在 Web 客户端(没有网站;我希望此信息与我的列表和表单在同一界面中)的方式访问这些数据。

4

0 回答 0