Odoo - 如何从其他模型正确复制视图

Odoo - how to properly copy views from other model

我有一个模型。例如,假设是这样的:

class my_model(models.Model):
    _name = 'my.model'

    field1 = fields.Char('name')

它有树视图和表单视图。两者都正常工作。

现在我创建了新模型,复制旧模型:

class my_model_template(models.Model):
    _name = 'my.model.template'
    _inherit = 'my.model'

现在到这部分,一切都很好。它复制旧模型的所有内容。但是说到浏览量..

所以我为 'my.model.template' 视图(树和表单)做了这个:

<record id="view_my_model_template_tree" model="ir.ui.view">
    <field name="name">my.model.template.tree</field>
    <field name="model">my.model.template</field>
    <field name="inherit_id" ref="my_model.view_my_model_tree"/>
    <field name="arch" type="xml">
        <tree string="My Model" position="attributes">
            <attribute name="string">My Model Template</attribute>
        </tree>
    </field>
</record>

<record id="view_my_model_template_form" model="ir.ui.view">
    <field name="name">my.model.template.form</field>
    <field name="model">my.model.template</field>
    <field name="inherit_id" ref="my_model.view_my_model_form"/>
    <field name="arch" type="xml">
        <form string="My Model" position="attributes">
            <attribute name="string">My Model Template</attribute>
        </form>
    </field>
</record>

但它没有正确复制视图。例如,树视图仅显示名称字段,而在原始视图中它有四个字段。在表单视图中,它似乎显示了所有字段,但这些字段位于某个随机位置,没有任何格式(在旧视图中)。

您需要指定为哪种视图模式打开哪个视图。因为当你复制另一个模型的视图时,它似乎没有自动找到正确的视图(即使为每个模式只定义了一个)

<record model="ir.actions.act_window.view" id="action_my_model_template_tree">
    <field name="sequence" eval="1"/>
    <field name="view_mode">tree</field>
    <field name="view_id" ref="view_my_model_template_tree"/>
    <field name="act_window_id" ref="action_my_model_template"/>
</record>     

<record model="ir.actions.act_window.view" id="action_my_model_template_form">
    <field name="sequence" eval="1"/>
    <field name="view_mode">form</field>
    <field name="view_id" ref="view_my_model_template_form"/>
    <field name="act_window_id" ref="action_my_model_template"/>
</record> 

备注 此外,如果您将在其他模型视图中的任何地方使用此类模型,并且您尝试直接从其他视图打开它的表单,它也会打开 "unformatted" 视图。要绕过这个,您需要指定要打开的视图:

例如像这样:

<record id="view_my_other_model_form" model="ir.ui.view">
    <field name="name">my.other.model.form</field>
    <field name="model">my.other.model.</field>
    <field name="arch" type="xml">
        <form string="My Other Model">
            <field name="my_model_template_id" 
                context="{'form_view_ref': 'my_model_template.view_my_model_template_form'}"/>
        </form>
    </field>
</record>