首页 > 解决方案 > 如何在不立即影响数据库的情况下删除记录

问题描述

在一个先例问题中,我正在寻找BaseModel.new一种行为类似于createORM 中的方法的方法,但没有在数据库中写入更改。

是否存在相同的方法,但表现得像unlink?我想在onchange通话中从我的记录集中删除一条记录。我不希望立即删除记录,但仅在用户按下Save按钮时才删除。

非常感谢您!


有关我为什么需要此功能的更多信息:

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

我不能简单地更改lot_id某些move_lines,因为它lot_id可能会保留在另一个中Picking(或者至少,我没有找到如何巧妙地做到这一点)。

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

标签: odooodoo-12

解决方案


我尝试了类似的东西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.pickingdelete cammand[...,[2, move_id, False]]

该框架能够检测到一条记录已从原始记录中删除recordset,这就是添加该命令的原因。

所以基本的想法是创建一个recordset包含有效记录的新文件,再次将其分配给 one2many 字段。


推荐阅读