Odoo 中有不少地方涉及对话向导页面模式,这种功能页很方便灵活,可以随意产生自已定义的表单/动作交互操作流,下面我们就举例讲解具体使用方法
以odoo中“更新模块列表”这个操作为例
class BaseModuleUpdate(models.TransientModel):
_name = "base.module.update"
_description = "Update Module"
updated = fields.Integer('Number of modules updated', readonly=True)
added = fields.Integer('Number of modules added', readonly=True)
state = fields.Selection([('init', 'init'), ('done', 'done')], 'Status', readonly=True, default='init')
其中几个字段都是用于状态记录的
@api.multi
def update_module(self):
for this in self:
updated, added = self.env['ir.module.module'].update_list()
this.write({'updated': updated, 'added': added, 'state': 'done'})
return False
<form string="Update Module List">
<field name="state" invisible="1"/>
<separator string="Module Update Result"/>
<group states="init">
<label string="Click on Update below to start the process..."/>
</group>
<group states="done">
<field name="updated"/>
<field name="added"/>
</group>
<footer>
<div states="init">
<button name="update_module" string="Update" type="object" class="btn-primary"/>
<button special="cancel" string="Cancel" class="btn-default"/>
</div>
<div states="done">
<button name="action_module_open" string="Open Apps" type="object" class="btn-primary"/>
<button special="cancel" string="Close" class="btn-default"/>
</div>
</footer>
</form>
form试图是wizard 向导页的呈现载体
创建 act_window
模型对象指向到上面定义的模型
创建触发点
方法一:从菜单出发
1.创建 act_window,模型对象指向到上面定义的模型
2.创建入口菜单关联上面创建的act_window
3.触发按钮可以放在指向该模型的任意试图里,如上面的form试图中的 name="update_module" 的按钮,每个按钮都可以关联模型定义中的一个方法,形成触发关联
方法二:从其他模型的下拉按钮触发
创建一个模型的下拉act_window,示例如下
<act_window
context="{'model_id': active_id}"
id="act_menu_creates"
name="创建菜单"
res_model="wizard.ir.models.menu.create"
src_model="ir.model"
key2="client_action_multi"
target="new"
view_mode="form"/>
其中src_model即为要挂载的目标模型,res_model为wizard本体模型,context的值是关键,限定当前动作只影响所选的行
上面说到了模型中定义的方法,其实他还可以关联一个 ir.actions.server 对象实现更高级的交互功能,具体用法我们将在后续文章中详细讲解