在扩展模型的 XML 中包含基本模型的 XML



Odoo 允许您使用_inherit字段轻松扩展模型。因此,可以在扩展模型中访问基本模型的通用代码和字段。

我的问题是:我可以构建扩展模型的 xml 文件(例如搜索视图、表单视图等(以重用基本模型的通用 xml 代码吗?

我已经读到模板包含机制(使用t-call(仅适用于 QWeb 模板,但通常不适用于 xml 视图(请参阅包含模板(。 据我了解,使用inherit_id的视图继承仅扩展给定模型的现有视图。但是,它无法包含现有视图的一部分来创建新视图。

那么这是否意味着我必须将基本模型中字段的通用 xml 代码复制到扩展此模型的所有视图中?

例:

模型继承

class Base(models.Model):
_name = 'bla.base'
common1 = fields.Text()
common2 = fields.Text()
class ExtA(models.Model):
_name = 'bla.exta'
_inherit = ['bla.base']
field_x = fields.Integer()
class ExtB(models.Model):
_name = 'bla.extb'
_inherit = ['bla.base']
field_y = fields.Integer()

视图

<record model="ir.ui.view" id="exta_search">
<field name="name">exta.search</field>
<field name="model">bla.exta</field>
<field name="arch" type="xml">
<search>
<field name="field_x"/>
<!-- Also include xml to search in base model -->
</search>
</field>
</record>
<record model="ir.ui.view" id="extb_search">
<field name="name">extb.search</field>
<field name="model">bla.extb</field>
<field name="arch" type="xml">
<search>
<field name="field_y"/>
<!-- Also include xml to search in base model -->
</search>
</field>
</record>

是的,存在视图继承的可能性,但不适用于t-call,它适用于可打印文档或客户端视图模板等模板。用于模型视图的模型ir.ui.view具有字段inherit_id。使用它来扩展原始视图或已扩展的视图。Odoo默认应用程序中有很多示例。

示例:模块/应用程序库具有模型res.partner和具有外部 IDview_partner_form的窗体视图。假设您已经使用新字段扩展了模型function2该字段应紧跟在function字段之后,您必须扩展视图:

<record id="view_partner_form" model="ir.ui.view">
<field name="name">extended by function2 short example</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" /> <!-- here the inheritance happens -->
<field name="arch" type="xml">
<field name="function" position="after">
<field name="function2" />
</field>
<!-- the same extension but with xpath instead -->
<!-- <xpath expr="//field[@name='function']" position="after">
<field name="function2" />
</field> -->
</field>
</record>

ref需要要扩展/继承的视图的外部 ID。如果 ID 来自另一个模块,请在模块名称前面加上,如示例中所示。

最新更新