odoo-将基本模型的xml包含在扩展模型的xml中

时间:2018-06-28 14:31:23

标签: inheritance odoo odoo-view

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

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

我已阅读到模板包含机制(使用t-call)仅适用于QWeb模板,但通常不适用于xml视图(请参见include templates)。 据我了解,使用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>

1 个答案:

答案 0 :(得分:-1)

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

示例:模块/应用库具有模型res.partner和带有外部ID view_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来自另一个模块,请像示例中一样在模块名称前添加

相关问题