代码之家  ›  专栏  ›  技术社区  ›  Andrius

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

  •  3
  • Andrius  · 技术社区  · 10 年前

    我有一个模型。例如,假设如下:

    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>
    

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   Naglis Jonaitis    8 年前

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

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

    笔记 此外,如果您将在其他模型视图中的任何位置使用这样的模型,并且您尝试直接从该其他视图打开它的表单,它也将打开“未格式化”视图。要绕过此操作,您需要指定要打开的视图:

    例如:

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