gpt4 book ai didi

javascript - 如何在 Odoo 10 的 JavaScript 中获取当前记录?

转载 作者:行者123 更新时间:2023-11-29 23:13:55 25 4
gpt4 key购买 nike

有谁知道如何在从 JavaScript 代码调用的 Python 方法中获取当前记录?

举个例子:

我有我的 Python 方法:

@api.multi
def my_method(self):
_logger.info(self)

要从我的 JS 代码中调用该方法,我必须执行以下操作:

var MyModel = new Model('my.model');
MyModel.call(
'my_method', [current_id],
)

因此,我需要从 JavaScript 获取当前 ID。因此,在调用该方法之前,我将当前 ID 以这种方式存储在 JS 变量中:

var current_id = this.field_manager.datarecord.id

它工作正常。但只有当记录已经有一个 ID 时。如果当前正在创建当前记录,this.field_manager.datarecord.id 返回 null,方法调用失败。

我想知道如何调用该方法,即使记录还没有 ID。例如,onchange 装饰器允许您在 Python 中处理未存储在数据库中因此还没有 ID 的记录。

有什么想法吗?

最佳答案

我不知道这是否对你有帮助,但你不能在未保存的情况下调用 api.multi 中的方法但你可以使用 api.model 来解决它并在函数调用中传递记录的 id在参数中。

MyModel.call(
'my_method', {'current_rec': current_id})

在你的 python 中处理创建模式

  @api.model
def my_method(self, current_rec=None):
if not current_rec:
# in create mode
# if you need a field from the view you need to pass its value in params like the id
# because self is a dummy record that is empty not like in onchange event
# because odoo build that dummy record for you from the values that they
# are in the current view.
else:
rec = self.browser(current_rec)
# remember value in api.multi or in rec are retrieved from the database
# not the current view values so if you relay on a value from the view
# pass it in params or find a way to tell odoo to build a dummy record like in onchange.

return result

这里的问题 self 是空的(在创建模式下)不像在 onchange 方法中。

但是你总是可以传递额外的参数,你可以从当前 View 中获取并将它们传递给方法如果您的逻辑需要它们。

不要忘记,如果您在逻辑中使用字段,在 api.multi 中您使用的是值从数据库中检索的不是它们在当前 View (在编辑模式下)中的值。

关于javascript - 如何在 Odoo 10 的 JavaScript 中获取当前记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53316155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com