1

我最近开始使用 Odoo,并决定尝试自定义表单视图。基本上,我想要做的是在默认表单视图中添加一个自定义侧边栏,例如 Inventory 应用程序的新收据。它看起来像这样:

自定义侧边栏样机

这是我尝试过的:我创建了一个模块,在其中编写了一个小部件及其模板:

侧边栏.js

odoo.define('sidebar_widget.bh_sidebar', function (require) {
  'use strict';

  var Widget = require('web.Widget');
  var widgetRegistry = require('web.widget_registry');
  var core = require('web.core');

  var QWeb = core.qweb;
  var _t = core._t;

  var bh_sidebar = Widget.extend({
    init: function () {
        var self = this;
        this._super(parent);
        console.log('Widget initialized!');
    },

    events: {},

    start: function () {
        this.$el.append(QWeb.render('bh_sidebar_template'));
    }

  });

  widgetRegistry.add(
    'bh_sidebar', bh_sidebar
  )
})

很基本。模板如下所示:

边栏.xml

<?xml version="1.0"?>
<templates id="template" xml:space="preserve">
   <t t-name="bh_sidebar_template">
       <div style="background-color:red;" class="myClass">
           <a href="#" class="butt1">Button 1</a>
           <a href="#" class="butt2">Button 2</a>
       </div>
   </t>
</templates> 

在编写完 js 和 xml 文件后,我不确定该去哪里,所以我只是将小部件添加到清单表单视图中,如下所示:

视图.xml

<odoo>
   <data>
    <record id="bh_sidebar_id" model="ir.ui.view">
        <field name="name">sidebar_widget.bh_sidebar</field>
        <field name="model">stock.picking</field>
        <field name="inherit_id" ref="stock.view_picking_form"/>
        <field name="arch" type="xml">
            <xpath expr="//header" position="after">
                <widget name="bh_sidebar" />
            </xpath>
        </field>
    </record>
   </data>
</odoo>

问题是,该小部件在表单内显示 QWeb 模板,但我希望它在它之外,在取消按钮和文档状态小部件上方。伊姆古尔 看到那里的红色条,我想要元素之外的那个,但我不能这样做,因为它是在继承的表单视图中添加的。

我想知道是否可以在表单之外调用小部件。也许我做错了,还有另一种更简单的解决方案。我真的很感激任何反馈!

4

0 回答 0