odoo13教程-wizards的使用
向导一般通过接受用户的输入,来接受数据,然后在向导模型中进行相应的数据处理。
1.wizards(向导)的效果展示
定义向导后,在通过动作关联到向导,效果如下:
(1.)会在tree或者form页面出现如下按钮
(2.)点击按钮可出现如下的表单
在定义的向导中可以获取到用户的context:tree选中的多条数据,或者form的单条数据
2. wizards的定义方法
wizards模型的定义
wizards的模型继承的是models.TransientModel
,其内的数据并不会在数据库中永久存储。
在单独的文件内定义以下内容,并记得引入
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class Wizard(models.TransientModel):
_name = 'academy.wizard'
_description = "Wizard: Quick Registration of Attendees to Sessions"
def _default_sessions(self):
return self.env['academy.lecture'].browse(self._context.get('active_ids'))
session_ids = fields.Many2many('academy.lecture',
string="Sessions", required=True, default=_default_sessions)
attendee_ids = fields.Many2many('res.partner', string="Attendees")
def subscribe(self):
for session in self.session_ids:
session.attendee_ids |= self.attendee_ids
return {}
tip:
在上述的代码中,
subscribe
是由下边xml中定义的按钮触发的。通过self._context.get('active_ids')可以获取到用户选取的数据
在xml中配置act_window
下面的代码定义了个一个act_window,来给action绑定的模型(binding_model
)增加一个动作(在绑定的模型中的tree和form视图的动作按钮中可以看到)。记得引入文件
<record model="ir.ui.view" id="wizard_form_view">
<field name="name">wizard.form</field>
<field name="model">academy.wizard</field>
<field name="arch" type="xml">
<form string="add attend">
<group>
<field name="session_ids"/>
<field name="attendee_ids"/>
</group>
<footer>
<button name="subscribe" type="object"
string="Subscribe" class="oe_highlight"/>
or
<button special="cancel" string="Cancel"/>
</footer>
</form>
</field>
</record>
<act_window id="launch_session_wizard"
name="添加出席学生"
binding_model="academy.lecture"
res_model="academy.wizard"
view_mode="form"
target="new"/>
通过上边的代码,便可以实现一个向导,向导一般通过接受用户的输入,来接受数据,然后在向导模型中进行相应的数据处理。
License:
CC BY 4.0