You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 15中继承的selection字段无法选中问题求助

Odoo 15 中 res.partner company_type 新增选项无法选中的解决办法
  • 确认模块与视图生效
    先确保模块已升级,通过开发者模式查看res.partner的company_type字段,确认新增的vendor和panel选项已被正确加载。如果视图中存在硬编码的选项值,要改成继承方式,避免覆盖selection_add的效果。

  • 适配前端联动逻辑
    Odoo原生的res.partner表单里,company_type字段有前端JS逻辑控制(比如切换公司/个人时显示隐藏对应字段),新增选项不在原生逻辑的判断范围内,会导致无法选中。需要自定义JS兼容新选项:

    1. 在模块的views/assets.xml中添加资源引用:
    <odoo>
        <data>
            <template id="assets_backend" name="partner custom assets" inherit_id="web.assets_backend">
                <xpath expr="." position="inside">
                    <script type="text/javascript" src="/your_module_name/static/src/js/partner_company_type.js"></script>
                </xpath>
            </template>
        </data>
    </odoo>
    
    1. 创建static/src/js/partner_company_type.js文件,内容如下:
    odoo.define('your_module_name.partner_company_type', function (require) {
        "use strict";
    
        var FormController = require('web.FormController');
        var FormView = require('web.FormView');
        var viewRegistry = require('web.view_registry');
    
        var PartnerFormController = FormController.extend({
            _onChangeCompanyType: function (ev) {
                var companyType = ev.target.value;
                // 兼容新增的vendor和panel选项,保留原逻辑
                var isCompany = ['company', 'vendor', 'panel'].includes(companyType);
                this.$('.o_company_only').toggle(isCompany);
                this.$('.o_person_only').toggle(!isCompany);
            },
        });
    
        var PartnerFormView = FormView.extend({
            config: _.extend({}, FormView.prototype.config, {
                Controller: PartnerFormController,
            }),
        });
    
        viewRegistry.add('partner_form', PartnerFormView);
    });
    

    记得把your_module_name替换成你的实际模块名称。

  • 重写onchange方法适配新选项
    原生res.partner的_onchange_company_type方法只处理company和person,新增选项会导致is_company字段无法正确更新,进而影响选中逻辑。在模型中重写该方法:

    class InheritContract(models.Model):
        _inherit = "res.partner"
    
        company_type = fields.Selection(selection_add=[('vendor', 'Vendor'),('panel', 'Panel')])
    
        @api.onchange('company_type')
        def _onchange_company_type(self):
            self.is_company = self.company_type in ['company', 'vendor', 'panel']
    

内容的提问来源于stack exchange,提问作者Mahfujul Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:37:09