代码之家  ›  专栏  ›  技术社区  ›  forvas

如何在odoo 10中获取当前javascript记录?

  •  2
  • forvas  · 技术社区  · 6 年前

    有人知道如何获取从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 收益率 无效的 ,方法调用失败。

    我希望知道如何调用该方法,即使记录还没有ID。例如, onchange decorator允许您在python中使用不存储在数据库中的记录,因此还没有ID。

    有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Charif DZ    6 年前

    我不知道这是否对你有帮助,但你不能 叫一个Mehtod进来 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方法中。

    但您始终可以传递从当前视图中获得的额外参数,并将它们传递给方法 如果你的逻辑需要它们。

    别忘了如果你在逻辑中使用一个字段 多功能接口 你使用的是价值观 从数据库中检索到的值不是当前视图中的值(在编辑模式下)。