Odoo - 根据条件禁用树视图中某些行的选择选项

问题描述 投票:0回答:3

如何根据条件禁用树视图中某些行的选择选项?

enter image description here

javascript python-3.x xml odoo odoo-12
3个回答
0
投票

为每个复选框提供一个唯一的 ID。

使用 Jquery 或 javascript onLoad 或 document.ready 方法禁用该复选框。创建 for 循环并为您的匹配值编写简单的禁用代码。

document.getElementById("myCheck").disabled = true;

我不确定odoo。但我对odoo有一点了解。如果动态数据来自数据库,则必须为此设置一个数据字段。


0
投票

根据文档,没有多重编辑功能。

复选框选择器添加在ListRenderer小部件的

_renderSelector
函数中,因此您需要重写它以根据条件禁用复选框。

在以下示例中,当

state
(硬编码)字段值等于
draft
时,我们禁用选择复选框。

示例:

odoo.define('web.CustomListRenderer', function (require) {
"use strict";

    var ListRenderer = require('web.ListRenderer');

    ListRenderer.include({
        _renderRow: function (record) {
            var self = this;
            var tr = this._super(record);
            tr.find("input[type='checkbox']").prop('disabled', record.data.state == 'draft');
            return tr;
        },
    });
});

您可以在操作上下文中传递评估域,然后使用当前记录值在

_renderSelector
函数中评估该域。

我们在init函数中初始化

domain
,并使用compute函数得到评估结果:

odoo.define('web.CustomListRenderer', function (require) {
"use strict";
    var ListRenderer = require('web.ListRenderer');
    var Domain = require('web.Domain');

    ListRenderer.include({
        init: function (parent, state, params) {
            this._super.apply(this, arguments);
            if (state.context.selection_domain) {
                this.domain = new Domain(state.context.selection_domain, state.context);
            }
        },

        _renderRow: function (record) {
            var self = this;
            var tr = this._super(record);
            if (record.evalContext.selection_domain) {
                tr.find("input[type='checkbox']").prop('disabled', this.domain.compute(record.data));
            }
            return tr;
        },
    });
});

您需要将

selection_domain
添加到操作上下文中:

 {..., 'selection_domain': [('state', '=', 'draft')]}

查看资产管理文档以了解如何将上述 JavaScript 代码添加到 Web 资产中,您还可以在在资产包中添加文件部分查看示例。


0
投票

感谢您分享此解决方案!我注意到它与 Odoo 14 和 Odoo 15 兼容。有人为 Odoo 17 改编过此代码吗?或者是否有可用的更新版本?任何有关使其与 Odoo 17 兼容的指导将不胜感激。

© www.soinside.com 2019 - 2024. All rights reserved.