Odoo 8:Many2one字段的嵌套表单视图

时间:2017-01-26 14:51:45

标签: odoo-8 openerp-8 odoo-view

我正在重构一个模型(我们称之为Parent),它存储了许多引用同一模型(Child)记录的Many2one字段。 Parent表单视图包含notebook,每个page都会显示特定Child的详细信息,目前在page内以重复方式描述并且有很多相关领域。我试图避免在视图中重复,并摆脱相关领域的需要。

class Child(models.Model):
    _name = "child"

   # ...

class Parent(models.Model):
    _name = "parent"

   child_1 = fields.Many2one('child', 'Child 1')
   child_1_age = fields.Float(related='child_1.age', string='Child Age')
   # ...
   child_2 = fields.Many2one('child', 'Child 2')
   child_2_age = fields.Float(related='child_2.age', string='Child Age')
   # ...


<!-- ... -->
<field name="model">parent</field>
<field name="type">form</field>
<field name="arch" type="xml">
    <notebook colspan="8" col="8">
        <page>
            <!-- buttons, a bunch of related Child fields, etc -->
        </page>
        <page>
            <!-- buttons, a bunch of related Child fields, etc -->
        </page>
    </notebook>
</field>

我为Child定义了一个特殊的表单视图,但我不知道如何将其插入notebook视图的Parent页面中。由于可以在表单中插入树视图(例如,对于One2many字段),我想必须有一种方法来处理表单。非常感谢如何实现这种效果的一个例子。

请忽略任何语法错误,上面只是一个简单的直观表示,以帮助更好地描述我的情况。

1 个答案:

答案 0 :(得分:2)

您可以使用widget属性将小部件分配给关系字段,例如

<field name="my_field" widget="my_widget"/>

要查看小部件如何工作和创建的示例,请查看以下示例:

转到addons/account/project/wizard/account_analytic_journal_report_view.xml,查看定义many2many_tags窗口小部件的行。

此表单小部件在addons/web/static/src/js/view_form.js附近的6396行分配,评论Registry of form fields ...

我们使用的many2many_tags字符串被分配了一个实际的窗口小部件,该窗口小部件有一个模板,并且该模板将被渲染以代替您的字段。

TL; DR 为您的字段提供widget元素,定义该窗口小部件,指定该窗口小部件以处理模板并创建包含您的视图的模板。