向导模式
向导模式是通过动态的表单与用户进行交互的方式。一个向导的实体不再从 Model
扩展,而是从 TransientModel
扩展。 TransientModel
类扩展了 Model
,除了重用所有已经存在的机制外,扩展了以下特性:
- 向导实体的数据记录并不被持久化;经过一段时间,这些记录将被自动删除。这也是为什么它们称为
transient
的原因。 - 向导实体不需要显式的访问权限:用户拥有向导实体数据记录的所有权限。
- 向导实体可以引用常规的数据记录,或者通过
many2one
字段与其他向导实体关联,但是常规的数据记录 不能 引用向导实体的数据记录。
我们尝试创建一个向导,允许用户为指定的培训添加参与者,或者一次操作多个培训。
向导练习:11-1
定义向导:
新建一个向导实体,与 Session 实体是
many2one
的关系,与 Partner 实体是many2many
的关系。添加文件
openacademy/models/wizard.py
:
加载向导
向导视图通过 ir.actions.act_window
记录加载,设置 target
字段为 new
。 向导视图将在弹出窗口中打开。该操作可以通过菜单来触发。
还有另外一种加载向导视图的方式:使用上述的 ir.actions.act_window
记录,但是使用一个特殊的字段 src_model
设定上下文,表示哪个实体可以使用该操作。向导将显示在实体的上下文操作中(Actions)。由于 ORM 内部挂接的原因,这类操作需要在 XML 文件中以 act_window
元素定义。
<act_window id="launch_the_wizard"
name="Launch the Wizard"
src_model="context.model.name"
res_model="wizard.model.name"
view_mode="form"
target="new"
key2="client_action_multi"/>
向导视图使用常规视图,其操作按钮可以用 special="cancel"
属性设置关闭向导窗口而不保存数据。
向导练习:11-2
加载向导视图:
- 定义向导的表单视图。
- 为 Session 实体添加操作加载向导。
- 为向导定义 Session 的缺省值;使用上下文参数
self._context
获取当前的培训。
向导练习:11-3
注册参与者:
为向导添加按钮,实现为培训添加参与者的方法。
向导练习:11-4
参与者注册多个培训:
修改向导实体,实现参与者可以注册多个培训。