有一个更好的方法吗?
在我看来,我将其添加到记录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建议有更好的方法吗?或许这可以帮助别人。
我认为您可以使用odoo客户端操作重新加载视图作为python函数的返回:
@api.model
def generate_data(self):
# do stuff on database
(...)
return {
'type': 'ir.actions.client',
'tag': 'reload',
}