odoo10(12)自定义视图

实现效果类似企业版会计报表的效果
首先补充一下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})

要在Odoo中新建自定义视图,需要进行以下操作: 1. 在odoo的python代码中增加新视图类型与视图模式。这可以通过在ir_actions_act_window.py和ir_ui_view.py文件中添加相关代码来实现。例如,在ir_actions_act_window.py文件中,我们可以增加以下代码来定义新的视图模式: ``` # -*- coding: utf-8 -*- from odoo import fields, models class ActWindowView(models.Model): _inherit = 'ir.actions.act_window.view' view_mode = fields.Selection(selection_add=[('eview', 'echart views')]) ``` 在ir_ui_view.py文件中,我们可以添加以下代码来定义新的视图类型: ``` # -*- coding: utf-8 -*- from odoo import fields, models class View(models.Model): _inherit = 'ir.ui.view' type = fields.Selection(selection_add=[('eview', 'echart views')]) ``` 这样,Odoo就可以识别我们新定义的视图类型。 2. 定义js相关文件和模板代码。通过编写相应的javascript文件和模板代码,我们可以实现对自定义视图的布局和行为的控制。这些文件需要与新定义的视图类型相关联,并与视图模板文件进行交互。具体的实现方法可以根据项目需求和技术要求来确定。 这样,在执行以上操作之后,就可以在Odoo中创建自定义视图了。自定义视图可以根据具体需求来设计和实现,包括自定义的布局、交互和样式等方面 。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Odoo自定义视图教程](https://blog.csdn.net/u012739578/article/details/121670077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值