首页 文章

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

提问于
浏览
1

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

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

我已经读过模板包含机制(使用 t-call )仅适用于QWeb模板,但一般不适用于xml视图(请参阅include templates) . 根据我的理解,使用 inherit_id 的视图继承只扩展了给定模型的现有视图 . 但是,它不能包含现有视图的一部分以创建新视图 .

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

例:

Model inheritance

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()

Views

<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 回答

  • -1

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

    示例:模块/应用程序库具有模型 res.partner 和具有外部标识 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来自另一个模块,请在示例中添加模块名称 .

相关问题