avatar

刘刚刚的blog

采菊东篱下,悠然见南山🦥

  • 首页
  • 大模型应用
  • 常用软件/工具
  • Halo
  • 关于
Home odoo13教程-wizards的使用
文章

odoo13教程-wizards的使用

Posted 2021-12-21 Updated 2024-12- 17
By Administrator
10~13 min read

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


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"/>

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

python
odoo
License:  CC BY 4.0
Share

Further Reading

Apr 21, 2025

Typing

类型注释让python 有了更好的编辑器提示功能。 基础使用 对函数参数和返回值,进行类型注释 def surface_area_of_cube(edge_length: float) -> str:    return f"The surface area of the cube is {6 *

Feb 25, 2025

python多进程多线程下的计数及日志打印

注意点: 需要保证在多进程内的进程锁是同一个 需要保证在单进程中的多线程内线程锁是同一个 # logger.py import multiprocessing import threading ​ ​ class Logger_test:    def __init__(self, process

Dec 25, 2022

python-迭代器、生成器、协程

迭代器 Python中当容器对象提供了对迭代的支持时,可以通过container.__iter__()来返回一个迭代器对象。 迭代器需要支持以下两个方法,这两个方法共同构成了迭代器协议: iterator.__iter__() 该方法返回迭代器本身,这个方法是配合for和in使用所必须的。 iter

OLDER

supervior安装及配置

NEWER

python中的time模块

Recently Updated

  • 文本切分-语义分割(Semantic Chunking)
  • dify 并发配置优化
  • Typing
  • 大模型返回中json_schema与json_mode的区别
  • Async

Trending Tags

Halo 运维 postgresql 设计模式 linux就该这么学 nas rag odoo python 文本切分

Contents

©2025 刘刚刚的blog. Some rights reserved.

Using the Halo theme Chirpy