如何在Odoo 11/12收到数据后刷新视图

问题描述 投票:0回答:1

有一个更好的方法吗?

在我看来,我将其添加到记录view.xml:

<field name="arch" type="xml">
  <tree string="Test View" js_class="test_view">
    <field name="testField" />
  </tree>
</field>

我有一个模板文件template.xml,我引用了manifest.py

<xpath>
  <script type="text/javascript" src="/<mymodule>/static/src/js/<mymodule>.js"> 
  </script>
</xpath>

将此功能添加到我的模型中:

@api.model
def generate_data(self):
  # do stuff on database
  pass

我在模块控制器中有这个:

class Reports(http.Controller):
    @http.route('/test/refresh', type='json', auth="user")
    def refresh(self):
        return request.env['model.name'].generate_data()

然后我在上面提到的.js中扩展了基ListView:

odoo.define('<mymodule>.updateview, function (require) {

  var view_registery = require('web.view_registry');
  var ListController = require('web.ListController');
  var ListView = require('web.ListView');

  var TestListController = ListController.extend({
    init: function () {
      this._super.apply(this, arguments);
            var self = this;
            this._rpc({
                route: '/test/refresh'
            }).then(function() {
                self.reload();
            });

    }
  });


  var ReportListView = ListView.extend({
      config: _.extend({}, ListView.prototype.config, {
          Controller: TestListController 
       }),
   });
  view_registery.add('test_view')
});

这一切都适用于加载页面。 Odoo建议有更好的方法吗?或许这可以帮助别人。

view refresh odoo
1个回答
0
投票

我认为您可以使用odoo客户端操作重新加载视图作为python函数的返回:

@api.model
def generate_data(self):
  # do stuff on database
  (...)
  return {
    'type': 'ir.actions.client',
    'tag': 'reload',
  }
© www.soinside.com 2019 - 2024. All rights reserved.