active_id 在 Odoo 13 中无法正常工作。没有它如何工作?

The active_id is not working properly in Odoo 13. How to work without it?

这就是问题,每个需要使用active_id的人都会遇到这个问题:https://github.com/odoo/odoo/issues/39070

总而言之,在自定义的 stock.production.lot 视图中,我有这个:

<field name="outgoing_moves" context="{'default_lot_id': active_id}"/>

其中 outgoing_moves 是一个 One2many 字段。我只想在每次用户添加新的传出移动时自动填写字段 lot_id 和当前打开的手数。

问题是,如果我从其他模型视图(例如通过快捷按钮)打开这个批次视图,active_id 不会更新,并给我带来以前模型的 ID。

例如,我在客户 133 中单击一个按钮后打开了批次 61。当我尝试在 One2many 字段中添加新的传出移动时,出现错误“ID 为 133 的批次不存在”。这是Odoo 13.0版本的一个bug,目前还没有修复。

他们在GitHub 线程中提出的解决方案是使用active_ids[0] 而不是active_id:

Notice that is does use active_ids[0], which works even in the example you provided.

<field name="outgoing_moves" context="{'default_lot_id': active_ids[0]}"/>

好吧,每个人似乎都对这个解决方案感到满意,但它对我来说不起作用。我很确定我的代码已正确更新并且我正在使用 active_ids[0],但我总是得到错误的 ID。

我读过的另一种解决方案是使用可靠 ID,这意味着记录(在我的例子中很多)本身的 ID。我已经尝试并工作了,但有时,在重新启动 Odoo 后,每次单击 Odoo 中的任何内容时,我都会收到 JavaScript 错误。当我删除 outgoing_moves:

的上下文时错误消失
<field name="id" invisible="1"/>
<field name="outgoing_moves" context="{'default_lot_id': id}"/>

有没有人遇到过这个问题并找到了解决方法?

lot_id 是 One2many 字段的逆字段吗?

您不需要在 One2many 字段模型的 list/form 视图中显示甚至定义此字段,因为它会在创建时由 Odoo 自动填充。

但是,如果它是默认视图(在其他地方使用),请创建一个继承视图,该视图会删除该字段并将此新视图定义为已用视图,尤其是在您需要此视图的地方。

这不是 active_id 问题的解决方案。我还不知道一个。