如何删除记录而不会立即产生数据库影响

时间:2019-05-31 12:54:33

标签: odoo odoo-12

precedent question中,我正在寻找一种BaseModel.new方法,其行为类似于ORM中的create方法,但是没有在数据库中写入更改。

是否存在相同的方法,但行为类似于unlink?我想通过onchange调用从记录集中删除一条记录。我不希望一次删除记录,而只是希望用户按下Save按钮时才能删除。

非常感谢您!


有关为何需要此功能的更多信息:

我正在使用Odoo的stock模块。在Picking中,我要动态更改保留的产品(按唯一的序列号跟踪),这意味着添加一些新的move_line并删除一些现有的产品。

我不能简单地更改lot_id,因为某些move_line的{​​{1}}可能被保留在另一个lot_id中(或者至少我没有找到如何整齐地做。)

通过在我的Picking方法中更改lot_id或执行selected_move_id.move_line_ids.new({...}),我可以添加新的。现在,我想删除不再需要的现有文件。我想以与用户按相应行上的onchange图标相同的方式删除它们。

1 个答案:

答案 0 :(得分:0)

我在self.gridRozvrh.CreateGrid(10, 10) 中尝试了类似的方法,但效果很好:

Odoo 12

当我调试# I change the partner for testing different cases @api.onchange('partner_id') def onchage_p(self): """ remove moves have less then 5 units""" # create empty record set to hold valid records new_recs = self.env['stock.move'] for move in self.move_ids_without_package: # keep only record that greater than 5 if move.product_uom_qty > 5: new_recs += move # reassign it to the field. self.move_ids_without_package = new_recs 上的write上的stock.picking调用时 已为所有保存的移动传递了delete cammand

该框架能够检测到已从原始[...,[2, move_id, False]]中删除了一条记录,这就是添加命令的原因。

因此,基本思路是创建一个包含有效记录的新recordset,并将其再次分配给one2many字段。很简单的^^