如何在没有立即数据库影响的情况下删除记录
How to delete a record without immediate database effect
在 中,我一直在寻找 BaseModel.new
方法,其行为类似于 ORM 中的 create
方法,但不在数据库中写入更改。
是否存在相同的方法,但表现得像 unlink
?我想在 onchange
调用中从我的记录集中删除一条记录。我不想立即删除记录,但只有在用户按下 Save
按钮时才删除。
非常感谢您!
有关我为什么需要此功能的更多信息:
我正在使用 Odoo 的 stock
模块。在 Picking
中,我想动态更改保留的产品(通过唯一序列号跟踪),这意味着添加一些新的 move_line
并删除一些现有的。
我不能简单地更改 lot_id
,因为某些带有此 lot_id
的 move_line
可能保留在另一个 Picking
中(或者至少,我没有找到如何巧妙地做到这一点)。
通过在我的 onchange
方法中更改 lot_id
或执行 selected_move_id.move_line_ids.new({...})
,我可以添加新的。现在我想删除我不再需要的现有的。我想删除它们的方式就像用户按下相应行上的 trash
图标一样。
我在 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
当我在 stock.picking
上调试 write
调用时 delete cammand
所有保存的动作都通过了:[...,[2, move_id, False]]
框架能够检测到一条记录已从原始 recordset
中删除,这就是添加该命令的原因。
所以基本的想法是创建一个新的 recordset
,其中包含有效的记录,再次将其分配给 one2many 字段。
在 BaseModel.new
方法,其行为类似于 ORM 中的 create
方法,但不在数据库中写入更改。
是否存在相同的方法,但表现得像 unlink
?我想在 onchange
调用中从我的记录集中删除一条记录。我不想立即删除记录,但只有在用户按下 Save
按钮时才删除。
非常感谢您!
有关我为什么需要此功能的更多信息:
我正在使用 Odoo 的 stock
模块。在 Picking
中,我想动态更改保留的产品(通过唯一序列号跟踪),这意味着添加一些新的 move_line
并删除一些现有的。
我不能简单地更改 lot_id
,因为某些带有此 lot_id
的 move_line
可能保留在另一个 Picking
中(或者至少,我没有找到如何巧妙地做到这一点)。
通过在我的 onchange
方法中更改 lot_id
或执行 selected_move_id.move_line_ids.new({...})
,我可以添加新的。现在我想删除我不再需要的现有的。我想删除它们的方式就像用户按下相应行上的 trash
图标一样。
我在 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
当我在 stock.picking
上调试 write
调用时 delete cammand
所有保存的动作都通过了:[...,[2, move_id, False]]
框架能够检测到一条记录已从原始 recordset
中删除,这就是添加该命令的原因。
所以基本的想法是创建一个新的 recordset
,其中包含有效的记录,再次将其分配给 one2many 字段。