我想在执行某些功能后动态触发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
答案 0 :(得分:4)
fields_view_get
在https://github.com/odoo/odoo/blob/10.0/odoo/models.py#L1334被load_views
调用,load_views
被https://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
或任何其他后端挂钩。