Odoo 15中继承的selection字段无法选中问题求助
Odoo 15 中 res.partner company_type 新增选项无法选中的解决办法
确认模块与视图生效
先确保模块已升级,通过开发者模式查看res.partner的company_type字段,确认新增的vendor和panel选项已被正确加载。如果视图中存在硬编码的选项值,要改成继承方式,避免覆盖selection_add的效果。适配前端联动逻辑
Odoo原生的res.partner表单里,company_type字段有前端JS逻辑控制(比如切换公司/个人时显示隐藏对应字段),新增选项不在原生逻辑的判断范围内,会导致无法选中。需要自定义JS兼容新选项:- 在模块的
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>- 创建
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
相关产品推荐
相关产品推荐

