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

2023-09-23  本文已影响0人  NIGangJun

说真的,太久没有在简书记录内容,最近写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这个数值就能满足效果:

图①
上一篇 下一篇

猜你喜欢

热点阅读