Javascript 奥多。隐藏字段选择中的某些选项

Javascript 奥多。隐藏字段选择中的某些选项,javascript,python,openerp,odoo-9,Javascript,Python,Openerp,Odoo 9,我的模型中有一些选择字段。例如: class MyModel(models.Model): _name = 'my_app.my_model' example_selection = fields.Selection( [ ('first', 'First'), ('second', 'Second'), # etc. ], string='My se

我的模型中有一些选择字段。例如:

class MyModel(models.Model):
    _name = 'my_app.my_model'

    example_selection = fields.Selection(
        [
             ('first', 'First'),
             ('second', 'Second'),
             # etc.
        ], 
        string='My selection', 
    )
在某些情况下,我需要在选择中隐藏特定选项(或单选按钮)。我怎样才能正确地做到这一点

下面是基本日历模块的屏幕,它可以更详细地解释我的问题


提前感谢。

AFAIK这是不可能的,但是如果在您可以使用的视图中使用manyOne而不是selection(因此使用域)end,您可以实现类似的效果

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


要获得与选择字段相同的视觉行为(不创建,不编辑)。

AFAIK这是不可能的,但是如果在可以使用的视图中使用多个选项而不是选择(因此使用域)结束,则可以实现类似的效果

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

获得与选择字段相同的视觉行为(不创建,不编辑)。

我找到了解决方案

首先,我们需要为FieldSelection创建自定义小部件。这里的示例(路径到您的模块/static/src/js/form\u widgets.js):

在此之后,您只需在视图中将小部件设置为field,如下所示:

<field name="example_selection" widget="your_selection"/>

如果您不知道如何包含模块的静态

我希望这对某人有帮助;)

我找到了解决办法

首先,我们需要为FieldSelection创建自定义小部件。这里的示例(路径到您的模块/static/src/js/form\u widgets.js):

在此之后,您只需在视图中将小部件设置为field,如下所示:

<field name="example_selection" widget="your_selection"/>

如果您不知道如何包含模块的静态


我希望这对某人有帮助;)

有点太晚了。就我而言,我是这样做的:

odoo.define('my_module.custom_selection', function(require) {
"use strict";

var registry = require('web.field_registry');
var relational_fields = require('web.relational_fields');

var MySelection = relational_fields.FieldRadio.extend({
    init: function() {
        this._super.apply(this, arguments);
        // use to decrement in splice, bc position change when element is removed
        let decrement = 0;
        // this.values can be undefined or [[], [], []]
        // copying the content of original array or []
        let value_copies = this.values? [...this.values]: [];
        
        for (let index = 0; index < value_copies.length; index++) {
            // 'other' is the value to be removed
            if (value_copies[index].includes('other')) {
                this.values.splice(index - decrement, 1);
                decrement++;
            }
        }
    },
});

registry.add('custom_selection', MySelection);

return MySelection;
});
odoo.define('my\u module.custom\u selection',函数(require){
“严格使用”;
var registry=require('web.field_registry');
var relational_fields=require('web.relational_fields');
var MySelection=relational_fields.FieldRadio.extend({
init:function(){
这个._super.apply(这个,参数);
//用于在接头中减小,拆除元件时bc位置改变
设减量=0;
//this.values可以是未定义的,也可以是[[]、[]、[]
//复制原始数组或[]的内容
让value\u copies=this.values?[…this.values]:[];
for(让index=0;index

你可以在这里查看我的回购:

有点晚了。就我而言,我是这样做的:

odoo.define('my_module.custom_selection', function(require) {
"use strict";

var registry = require('web.field_registry');
var relational_fields = require('web.relational_fields');

var MySelection = relational_fields.FieldRadio.extend({
    init: function() {
        this._super.apply(this, arguments);
        // use to decrement in splice, bc position change when element is removed
        let decrement = 0;
        // this.values can be undefined or [[], [], []]
        // copying the content of original array or []
        let value_copies = this.values? [...this.values]: [];
        
        for (let index = 0; index < value_copies.length; index++) {
            // 'other' is the value to be removed
            if (value_copies[index].includes('other')) {
                this.values.splice(index - decrement, 1);
                decrement++;
            }
        }
    },
});

registry.add('custom_selection', MySelection);

return MySelection;
});
odoo.define('my\u module.custom\u selection',函数(require){
“严格使用”;
var registry=require('web.field_registry');
var relational_fields=require('web.relational_fields');
var MySelection=relational_fields.FieldRadio.extend({
init:function(){
这个._super.apply(这个,参数);
//用于在接头中减小,拆除元件时bc位置改变
设减量=0;
//this.values可以是未定义的,也可以是[[]、[]、[]
//复制原始数组或[]的内容
让value\u copies=this.values?[…this.values]:[];
for(让index=0;index

您可以在此处查看我的回购:

是。我知道。。。但我扩展了另一个模块的选择。此字段在整个系统中使用。我不能替换这个字段。((谢谢你的回答,但我不能用这种方式。我的想法是:只需添加js文件并在客户端编写逻辑。我不是客户端专家,对不起:(但如果你解决了你的问题,请记住在这里发布答案,以帮助他人:)当然。客户端对odoo来说很头痛((((嘿!我找到了解决方案。如果您感兴趣,可以查看我的答案。我希望它会有用。祝您好运;)是的。我知道……但我扩展了从另一个模块中选择的内容。此字段在整个系统中使用。我无法替换此字段(((谢谢你的回答,但我不能用这种方式。我的想法是:只需添加js文件并在客户端编写逻辑。我不是客户端专家,对不起:(但如果你解决了你的问题,请记住在这里发布答案,以帮助他人:)当然。客户端对odoo来说很头痛((((嘿!我找到了解决方案。如果您感兴趣,可以查看我的答案。我希望它会有用。祝您好运;)嗨,我需要帮助。我正在尝试,但什么都没有发生。即使警报也不起作用。@user3162878抱歉耽搁了(我在度假)。我去年没有使用过
odoo
。请再试一次我的答案。它应该可以工作。请尝试清除缓存,升级所有模块/应用程序,重新启动服务器。您好,我需要帮助。我正在尝试,但什么都没有发生。即使警报也不起作用。@user3162878抱歉延迟(我正在休假)。去年我没有使用过
odoo
。请再试一次我的答案。应该可以。尝试清除缓存,升级所有模块/应用程序,重新启动服务器。噢!谢谢!噢!谢谢!