刘刚刚的个人博客

odoo13教程-wizards的使用


向导一般通过接受用户的输入,来接受数据,然后在向导模型中进行相应的数据处理。

1.wizards(向导)的效果展示

定义向导后,在通过动作关联到向导,效果如下:

(1.)会在tree或者form页面出现如下按钮

image-20201220235248720

image-20201220235349780

(2.)点击按钮可出现如下的表单

image-20201220235527131

在定义的向导中可以获取到用户的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:

  1. 在上述的代码中,subscribe是由下边xml中定义的按钮触发的。
  2. 通过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"/>

通过上边的代码,便可以实现一个向导,向导一般通过接受用户的输入,来接受数据,然后在向导模型中进行相应的数据处理。

我的名片

昵称:shuta

职业:后台开发(python、php)

邮箱:648949076@qq.com

站点信息

建站时间: 2020/2/19
网站程序: ANTD PRO VUE + TP6.0
晋ICP备18007778号