我正在使用Odoo 12的Inventory
插件(但是我的问题可能发生在任何模块上)。
在此插件中,StockMove
模型具有一个move_line_ids
字段。
在Detailed Operations
对话框中,我们可以看到所选移动的所有移动线的树状视图。
如果单击Add a line
按钮并设置字段,则除非单击Confirm
按钮,否则值将存储在内存中,而不存储在数据库中。
我想在我的自定义@api.onchange()
模型的StockMove
方法中复制此行为,但找不到如何进行操作。
如果我使用self.move_line_ids.create()
方法创建新记录,则即使不单击Confirm
按钮,移动行也将存储在数据库中。
有没有设法做到这一点的人?
提前谢谢!
很抱歉,如果它是重复的问题,但是我还没有找到我问题的答案> << / p>
jzeta的答案有效,但中断了其他Move
字段,例如reserved_availability
(总是0
)或quantity_done
(总是1
)。
我将jzeta验证为有效,因为评论表明我正在寻找解决方案。
非常感谢你们的帮助!
答案 0 :(得分:2)
我相信您可以通过将值直接分配给move_line_ids
来实现。当然,给定字段为One2many
,则需要使用三元组的特殊列表来实现此目的。在您的情况下,您需要一个[(0, _, values)]
来创建新记录(其中values
是保存每个新记录的字段值的字典)。在下面的示例中,我仅创建一个附加到给定stock.move
实例的记录,并且仅在字典中传递move_id
值。您应该使用新的移动行的适当值来完成代码,但是请注意,您应始终告诉新记录将其链接到哪个股票移动。
@api.onchange('your_field_name')
def _onchange_field(self):
self.move_line_ids = [(0, False, {'move_id': self.id})]
答案 1 :(得分:-2)
.create
方法会在数据库中创建一条记录,因此可以这样做,
如果我了解您,我认为您应该使用类似TransientModel
或AbstractModel
的东西!!
An Abstract model is created by a class based on models.AbstractModel instead of
the usual models.Model. It has all the attributes and capabilities of regular models; the
difference is that the ORM will not create an actual representation for it in the database. So,
it can have no data stored in it. It serves only as a template for a reusable feature that is to be
added to regular models.