我一直在为 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 客户端(没有网站;我希望此信息与我的列表和表单在同一界面中)的方式访问这些数据。