实现效果类似企业版会计报表的效果
首先补充一下odoo中对象的几种类型
基础模型BaseModel,以下几种类型依次继承
1、models.AbstractModel
抽象模型,不会在数据库中创建对应表
2、models.Model
安装或升级会自动在数据库中创建对应表
3、models.TransientModel
临时表,在数据库中有对应表,但是数据会定期清理
根据这三种类似,在自定义视图时选择合适的类型
1、自定义一个action client
<record id="custom_client_id" model="ir.actions.client">
<field name="name">自定义视图</field>
<field name="tag">custom_tag</field>
</record>
2、js实现上面的action client
odoo.define('xxxx', function (require) {
'use strict';
var time = require('web.time');
var core = require('web.core');
var Model = require('web.Model');
var Dialog = require('web.Dialog');
var Widget = require('web.Widget');
var formats = require('web.formats');
var session = require('web.session');
var framework = require('web.framework');
var crash_manager = require('web.crash_manager');
var ControlPanelMixin = require('web.ControlPanelMixin');
var QWeb = core.qweb;
var custom_tag= Widget.extend({
init: function(parent, action, options) {
this.actionManager = parent;
return this._super.apply(this, arguments);
},
willStart: function() {
return this.get_html();
},
set_html: function() {
this.$el.html(this.html);
},
start: function() {
this.set_html();
return this._super.apply(this, arguments);
},
restart: function(given_context) {
var self = this;
return this.get_html().then(function() {
self.set_html();
});
},
get_html: function() {
var self = this;
var defs = [];
//调用后台方法获取自定义视图
return new Model('xxxx').call('xxxx',[]).then(function (result) {
self.html = result.html;
return $.when.apply($, defs);
});
},
});
core.action_registry.add("custom_tag", custom_tag);
return custom_tag;
});
上面渲染自定义视图的方法有两种:
1、后台渲染,返回html
self.env[‘ir.model.data’].xmlid_to_object(‘qweb视图’).render({‘context’: self})
2、前台渲染,返回数据结构
QWeb .render(‘qweb视图’,{‘widget’:self})