在加载所有记录并调用fields_view_get函数后,动态触发Odoo fields_view_get

时间:2017-08-28 07:29:21

标签: python models odoo odoo-10 odoo-view

我想在执行某些功能后动态触发fields_view_get函数。我重写函数fields_view_get并返回我的结果。只有在第一次调用实际函数时,才会在 XML 视图中受到影响。所以我需要刷新视图以影响 arch 上的新值。

有没有办法让 odoo 视图在第一次调用函数后用fields_view_get函数更改?

我的尝试:

# here fields view get changes the button string from getting arch
# I overrided the fields_view_get on event model and its get affected and works
# perfectly when I click on main menu Event.but not after the records loaded.

@api.multi
def send_mail_event(self):
    x = self.event_id.fields_view_get(view_id=None, view_type='form', toolbar=False, submenu=False)
    self.send_mail_event_reg_link(test=True)
    return x

1 个答案:

答案 0 :(得分:4)

fields_view_gethttps://github.com/odoo/odoo/blob/10.0/odoo/models.py#L1334load_views调用,load_viewshttps://github.com/odoo/odoo/blob/10.0/addons/web/static/src/js/view_manager.js#L130的Web客户端的视图管理器调用

现在,在view_manager.js中查看load_view在哪里以及何时调用。 我们可以看到它在https://github.com/odoo/odoo/blob/10.0/addons/web/static/src/js/view_manager.js#L182处被调用,这是我们感兴趣的调用。

如果您在widget.js上看到willStart函数,则该控件将在其管理的DOM上附加该控件时调用。加载dom后,附件只会发生一次。

因此,回顾一下,fields_view_get在页面加载时运行一次,如果您想再次调用它,则需要从js / web客户端进行操作通过调用load_views javascript函数。

但是通常在Odoo中,请尽可能避免使用Web客户端扩展。如果要基于用户的操作在当前视图上进行更改,可以使用onchange或任何其他后端挂钩。