我正在重构一个模型(我们称之为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字段),我想必须有一种方法来处理表单。非常感谢如何实现这种效果的一个例子。
请忽略任何语法错误,上面只是一个简单的直观表示,以帮助更好地描述我的情况。
答案 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元素,定义该窗口小部件,指定该窗口小部件以处理模板并创建包含您的视图的模板。