odoo - 如何在不立即影响数据库的情况下删除记录
问题描述
在一个先例问题中,我正在寻找BaseModel.new
一种行为类似于create
ORM 中的方法的方法,但没有在数据库中写入更改。
是否存在相同的方法,但表现得像unlink
?我想在onchange
通话中从我的记录集中删除一条记录。我不希望立即删除记录,但仅在用户按下Save
按钮时才删除。
非常感谢您!
有关我为什么需要此功能的更多信息:
我正在使用stock
Odoo 的模块。在 aPicking
中,我想动态更改保留的产品(由唯一的序列号跟踪),这意味着添加一些新move_line
的并删除一些现有的。
我不能简单地更改lot_id
某些move_line
s,因为它lot_id
可能会保留在另一个中Picking
(或者至少,我没有找到如何巧妙地做到这一点)。
通过在我的方法中更改lot_id
或做,我可以添加新的。现在我想删除我不再需要的现有的。我想以与用户按下相应行上的图标相同的方式删除它们。selected_move_id.move_line_ids.new({...})
onchange
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
当我调试
所有已保存动作的write
调用时:stock.picking
delete cammand
[...,[2, move_id, False]]
该框架能够检测到一条记录已从原始记录中删除recordset
,这就是添加该命令的原因。
所以基本的想法是创建一个recordset
包含有效记录的新文件,再次将其分配给 one2many 字段。
推荐阅读
- android - 是否可以为房间持久性库压缩预打包的数据库?
- python - 循环只迭代一次并且不处理错误python
- node.js - 检查点是否在矩形内(全部由地球上的经度/纬度(球体)给出)
- api - 对于 WSO2 APIM 2.1.0,如何将应用程序令牌的到期时间设置为 -1?
- generics - 创建一个泛型类型来检查函数参数键是否与给定的泛型类类型匹配
- c++ - 模板类的 C++ for range 循环
- javascript - 尽管设置正确,但 Nuxt.Js axios 未使用 baseURL
- javascript - 反应删除 bootstrap.tsx
- spring-boot - DeadLetterPublishingRecoverer 中的 Kafka 序列化器与 Spring 消息转换器
- node.js - 运行 npm init 找不到模块