odoo selection字段隐藏指定的可选项

需求:
一个selection字段前期设置A,B,C三个选项,后期业务变动需要改成B,C,D,但是历史数据不能修改,即还要保留A选项,此时代码里的字段设置只能改成A,B,C,D四个值了,但是又要求下拉选项中不能再出现A

思路:
基于以上需求其实思路也就只有一个那就是在编辑状态下隐藏selection字段的中下拉选项A,简单查找一下发现原生中就有隐藏操作,下拉选项本身是可以选择空值的,但是如果字段设为必填后空值选项就消失了,所以只要复用一下这隐藏方法就能达到我们的目的了

实现:
排查后找到最终代码位置:
/addons/web/static/src/js/fields/relational_fields.js FieldSelection类中的_renderEdit方法

_renderEdit: function () {
        this.$el.empty();
        var required = this.attrs.modifiersValue && this.attrs.modifiersValue.required;
        for (var i = 0 ; i < this.values.length ; i++) {
            var disabled = required && this.values[i][0] === false;

            this.$el.append($('

只需要将我们的逻辑加入disabled的判断中就可以实现屏蔽指定的值

// var disabled = required && this.values[i][0] === false;
// Selection字段增加指定下拉选择时隐藏指定选项
// 使用方法: 在xml对应字段标签中增加参数 options="{'hide_values':['A']}"
var disabled = (required && this.values[i][0] === false) || (this.nodeOptions.hide_values && this.nodeOptions.hide_values.includes(this.values[i][0]));

你可能感兴趣的:(odoo selection字段隐藏指定的可选项)