如何在Odoo 10中使用JavaScript获取当前记录?

时间:2018-11-15 09:24:56

标签: javascript odoo odoo-10

有人知道如何用从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。

有什么想法吗?

1 个答案:

答案 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中您正在使用值 从数据库中检索的不是当前视图中的值(在编辑模式下)。