有人知道如何用从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。
有什么想法吗?
答案 0 :(得分:1)
我不知道这是否对您有帮助,但您不能
呼叫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
这里的问题是自我为空(在创建模式下),不像 在onchange方法中。
,但是您始终可以传递可以从当前视图获取的额外参数,并将其传递给方法 如果您的逻辑中需要它们。
也不要忘记您是否在逻辑中使用字段,在api.multi
中您正在使用值
从数据库中检索的不是当前视图中的值(在编辑模式下)。