在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
图标相同的方式删除它们。
答案 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字段。很简单的^^