如何隐藏"创建和编辑"所有形式的按钮odoo以及"搜索更多"按钮在每一行

时间:2017-10-12 07:03:13

标签: openerp odoo-8 odoo-9 odoo-10

我想隐藏"创建和编辑"所有形式的按钮

我也希望展示"搜索更多"所有形式的按钮

Hide and Show button for all module

目前我正在使用odoo 10。

让我们看看这个插件

https://apps.openerp.com/apps/modules/9.0/web_m2x_options/

我曾尝试使用该插件,但它根本不起作用。

在这种情况下有人可以帮助我吗?无论是使用那些插件,还是其他简单的方法来做我需要做的事情。

我会对任何回复都赞不绝口。

提前致谢。

3 个答案:

答案 0 :(得分:2)

在这里,我将更改odoo的默认行为,以便在我想要时显示创建和编辑 使用这个:

       <field name="many2one_field" options="{'create':true, 'quick_create':true}"/>

现在,在您的costum模块下,可以定义一个javascript文件来更改many2one小部件

  you_costum_module_directory_name 
        --> static
            --> src 
                  --> js
                      --> costum_many2one_widget.js

javascript文件:

odoo.define('you_costum_module_directory_name.costum_many2one_widget' , function(require) {
    // I hope that you know how to add this to odoo backendassets

        // first we need core
        var core = require('web.core');
        // it's needed when we override get_search_result
        var data = require('web.data');

        // NOTE: i may forget to require some object in the code by mistake check it 

        // now we must get the many2one widget for form widget
        var FieldMany2One = core.form_widget_registry.get('many2one');

        // now we can override the method to change the behavor
        FieldMany2one.include({
            // if you want the search more to be always shown we must overrid
            // get_search_result and we need to require every thing we need first like data object
            // now to show search more always we must reimplement the 
            get_search_result: function(search_val) {
                var self = this;

                var dataset = new data.DataSet(this, this.field.relation, self.build_context());
                this.last_query = search_val;
                var exclusion_domain = [], ids_blacklist = this.get_search_blacklist();
                if (!_(ids_blacklist).isEmpty()) {
                    exclusion_domain.push(['id', 'not in', ids_blacklist]);
                }

                return this.orderer.add(dataset.name_search(
                        search_val, new data.CompoundDomain(self.build_domain(), exclusion_domain),
                        'ilike', this.limit + 1, self.build_context())).then(function(_data) {
                    self.last_search = _data;
                    // possible selections for the m2o
                    var values = _.map(_data, function(x) {
                        x[1] = x[1].split("\n")[0];
                        return {
                            label: _.str.escapeHTML(x[1].trim()) || data.noDisplayContent,
                            value: x[1],
                            name: x[1],
                            id: x[0],
                        };
                    });

                    // show search more if there is only one element at least 
                    // you can make it 0 if you want
                    if (values.length >= 1) {
                        values = values.slice(0, self.limit);
                        values.push({
                            label: _t("Search More..."),
                            action: function() {
                                dataset.name_search(search_val, self.build_domain(), 'ilike', 160).done(function(_data) {
                                    self._search_create_popup("search", _data);
                                });
                            },
                            classname: 'o_m2o_dropdown_option'
                        });
                    }
                    // if the user provide an option quick_create show quick create
                    var raw_result = _(_data.result).map(function(x) {return x[1];});
                    if (
                        search_val.length > 0 && 
                        !_.include(raw_result, search_val) &&
                        self.options && self.options.quick_create
                        ) {
                        self.can_create && values.push({
                            label: _.str.sprintf(_t('Create "<strong>%s</strong>"'),
                                $('<span />').text(search_val).html()),
                            action: function() {
                                self._quick_create(search_val);
                            },
                            classname: 'o_m2o_dropdown_option'
                        });
                    }
                    // if the user provide a create option show create and Edit option
                    if (self.options && self.options.create && self.can_create){
                        values.push({
                            label: _t("Create and Edit..."),
                            action: function() {
                                self._search_create_popup("form", undefined, self._create_context(search_val));
                            },
                            classname: 'o_m2o_dropdown_option'
                        });
                    }
                    else if (values.length === 0) {
                        values.push({
                            label: _t("No results to show..."),
                            action: function() {},
                            classname: 'o_m2o_dropdown_option'
                        });
                    }

                    return values;
                });
            }
        });


        // id don't know if this line is required or not 
        // but if we have to registre the widget again
        core.form_widget_registry.add('many2one', FieldMany2One);

    }); 

现在您需要将js文件添加到backendassets模板

you_costum_module_directory_name 
            --> static
                --> src 
                      --> js
                          --> costum_many2one_widget.js

            --> xml
                --> widgets.xml

将xml文件添加到清单:

<?xml version="1.0" encoding="utf-8" ?>
    <openerp> <!-- odoo in odoo 10.0 -->
        <data>

            <!--We need to load our js file to backend_assets-->
            <template id="assets_backend" name="many2one new edits " inherit_id="web.assets_backend">
                <xpath expr="." position="inside">
                    <script type="text/javascript" src="/you_costum_module_directory_name/static/src/js/costum_many2one_widget.js"></script>
                </xpath>
            </template>

        </data>
    </openerp>
清单__openerp__.py中的

添加xml文件:

答案 1 :(得分:1)

您可以在您的字段中选择一个小部件:

<field name="your_one2many_field" widget="selection"/>

隐藏&#34;创建和编辑&#34;使用:

<field name="your_one2many_field" options="{'no_create_edit':True}"/>

答案 2 :(得分:1)

可以将它用于所有模块。但是你需要在ir.config.parameter中创建一条记录。

配置 - &gt;技术 - &gt;参数 - &gt;系统参数

要删除create_edit按钮,您必须添加此信息。

密钥:&#34; web_m2x_options.create_edit&#34; 价值:&#34;假&#34;。

要在任何many2one和Many2many字段上添加更多搜索,您必须添加。

密钥:&#34; web_m2x_options.search_more&#34; 价值:&#34; true&#34;。

PS:您可以在此github页面https://github.com/OCA/web/tree/9.0/web_m2x_options

上查看更多信息