向导模式

向导模式是通过动态的表单与用户进行交互的方式。一个向导的实体不再从 Model 扩展,而是从 TransientModel 扩展。 TransientModel 类扩展了 Model ,除了重用所有已经存在的机制外,扩展了以下特性:

  • 向导实体的数据记录并不被持久化;经过一段时间,这些记录将被自动删除。这也是为什么它们称为 transient 的原因。
  • 向导实体不需要显式的访问权限:用户拥有向导实体数据记录的所有权限。
  • 向导实体可以引用常规的数据记录,或者通过 many2one 字段与其他向导实体关联,但是常规的数据记录 不能 引用向导实体的数据记录。

我们尝试创建一个向导,允许用户为指定的培训添加参与者,或者一次操作多个培训。

向导练习:11-1

定义向导:

新建一个向导实体,与 Session 实体是 many2one 的关系,与 Partner 实体是 many2many 的关系。

添加文件openacademy/models/wizard.py

openacademy/__init__.py

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

加载向导视图:

  1. 定义向导的表单视图。
  2. 为 Session 实体添加操作加载向导。
  3. 为向导定义 Session 的缺省值;使用上下文参数 self._context 获取当前的培训。

openacademy/models/wizard.py

openacademy/views/openacademy.xml

向导练习:11-3

注册参与者:

为向导添加按钮,实现为培训添加参与者的方法。

openacademy/views/openacademy.xml

openacademy/models/wizard.py

向导练习:11-4

参与者注册多个培训:

修改向导实体,实现参与者可以注册多个培训。

openacademy/views/openacademy.xml

openacademy/models/wizard.py

results matching ""

    No results matching ""