美文网首页
odoo如何创建并打开一个newid记录思路

odoo如何创建并打开一个newid记录思路

作者: NIGangJun | 来源:发表于2023-09-23 15:20 被阅读0次

    说真的,太久没有在简书记录内容,最近写odoo,发现有个很正常的需求但是就是找不到解决方案。经过自己一番研究,打算还是分享出来。

    背景:需求要求创建一条预览数据,可以不要(则系统不会保存),可以使用(保存到数据库)。

    需求上就是需要创建一条待保存的数据,确认没问题系统再保存到数据库。
    先上解决方案:

        @api.multi
        def btn_generate_purchase_order(self):
            """
            销售订单 生成 采购订单
            :return:
            """
            context = dict(self.env.context)
            # 窗口处于 编辑 状态
            context['form_view_initial_mode'] = 'edit'
            context.update({
                # 传入 default_ 默认数据
                "default_order_line": [(0, 0, {
                    "name": val.name,
                    "product_id": val.product_id.id,
                    "product_qty": val.product_uom_qty,
                    "product_uom": val.product_uom.id,
                    "price_unit": val.price_unit,
                    "taxes_id": [(6, 0, val.tax_id.ids)],
                    "date_planned": val.create_date,
                }) for val in self.order_line],
            })
            return {
                "name": "采购订单",
                "view_mode": "form",
                "res_model": "purchase.order",
                "type": "ir.actions.act_window",
                "target": "current",
                "context": context
            }
    

    只要玩过odoo应该都很熟悉上面的逻辑。

    是的,实际上我查了odoo的源码,打开调试模式看了odoo并不支持用上下文传递newid这样的对象,res_id只能接受一个int型的对象id。

    那么重点来了,要实现这样的效果,应该支持以下三个条件:

    1. 返回一个编辑模式的form视图,form_view_initial_mode: edit可以满足;
    2. 数据未保存到数据库,只要不传res_id即可满足;
    3. 界面应该有初始数据,提供用户进行确认,default_可以支持返回默认数据。

    所以思路就是造一套默认数据返回,并且打开编辑模式,去掉res_id这个数值就能满足效果:

    图①

    相关文章

      网友评论

          本文标题:odoo如何创建并打开一个newid记录思路

          本文链接:https://www.haomeiwen.com/subject/levxbdtx.html