0

我正在重构一个模型(我们称之为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 字段),我想也必须有一种方法来处理表单。一个如何实现这种效果的例子将不胜感激。

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

4

1 回答 1

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为您的字段提供一个小部件元素,定义该小部件,分配该小部件以处理模板并创建包含您的视图的模板。

于 2017-01-27T10:25:20.063 回答