odoo向导

24 篇文章 0 订阅
23 篇文章 1 订阅
本文详细介绍了Odoo中如何创建和使用向导,通过瞬态模型处理复杂数据。首先定义瞬态模型及其字段和方法,然后创建对应的form视图。接着在目标模型中定义动作,调用向导视图。最后展示如何在模型方法中打开瞬态模型视图,并传递数据。整个流程涵盖了从模型定义到视图展现的全过程。
摘要由CSDN通过智能技术生成

odoo中有很多地方使用到了向导,实际上是通过一个瞬态模型作为中间模型处理数据,来达到某些模型上不好直接处理的数据

向导的流程:

定义瞬态模型的模型和视图 -> 定义一个动作以及动作对应的方法打开瞬态模型的form视图 -> 定义瞬态模型form视图底部按钮 -> 瞬态模型中处理数据

示例步骤如下: 注意:新定义的模型需要在权限文件ir.model.access.csv中注册,新定义的视图如果是单独文件,需要在__manifest__.py中引入

1. 创建瞬态模型

from odoo import models, fields, api, exceptions


class 瞬态模型类名(models.TransientModel):
    '''
    瞬态模型
    '''

    _name = '瞬态模型名称'

    字段1 = 字段定义
    字段2 = 字段定义

    def 瞬态模型form视图底部按钮方法(self):
        处理逻辑

2. 定义瞬态模型的form视图

<odoo>
    <data>
        <record model="ir.ui.view" id="视图id">
            <field name="name">视图名称</field>
            <field name="model">瞬态模型名称</field>
            <field name="arch" type="xml">
                <form>
                    <sheet>
                        <group>
                            <field name="字段1"/>
                            <field name="字段2"/>
                        </group>
                    </sheet>
                    <footer>
                        <button class="btn btn-primary" type="object" name="对应瞬态模型定义的底部按钮方法" text="底部按钮"/>
                        <button class="btn btn-secondary" text="取消" special="cancel" />
                    </footer>
                </form>
            </field>
        </record>
    </data>
</odoo>

3. 在需要定义向导的模型视图中定义一个动作,关联到需要向导的模型

<record id="动作id" model="ir.actions.server">
            <field name="name">动作名称</field>
            <field name="model_id" ref="需要向导的模型model_xx_xxx_xx"/>
            <field name="binding_model_id" ref="需要向导的模型model_xx_xxx_xx"/>
            <field name="state">code</field>
            <field name="is_button">False</field>
            <field name="code">
                if records:
                    action = model.需要向导的模型定义的打开向导视图方法function_xxx(env.context.get("active_ids"))
            </field>
        </record>

4. 定义需要向导的模型的python方法,来打开瞬态模型的视图

@api.multi
    def function_xxx(self, ids):
        '''
        打开瞬态模型视图
        '''
        form_id = self.env.ref('瞬态模型所在模块的文件名.瞬态模型form视图id').id
        return {
            "type": "ir.actions.act_window",
            "view_mode": "form",
            "res_model": "瞬态模型名称_name属性",
            "name": "action名称",
            "target": "new", # 打开视图方式new是弹窗方式(推荐)
            "mode": 'edit', # 打开视图的初始模式edit是编辑模式
            "views": [[form_id, "form"]],
            "context": {'default_字段1': [[6, 0, ids]]} #可以通过这种字段默认值的方式将选中的记录id传递到瞬态模型,也可以通过context中自定义其他属性传递 比如"context": {'ids': ids} 瞬态模型中可以通过self._context['ids']获取
        }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值