如何在Odoo伙伴视图中创建带预选选项的标签字段?
问题背景
你需要在res.partner视图中创建一个带预选选项的多选标签字段,替代原生的category_id,但尝试调用自定义字段时出现Field "vaction_ids" does not exist in model "res.partner"错误。
解决步骤
1. 定义预选值与对应字段
首先必须在res.partner模型中声明对应的字段,Odoo视图里的字段必须和模型定义一一对应,这是你之前报错的核心原因。推荐用关联模型+many2many字段的方案,扩展性更强:
第一步:创建预选值存储模型
先新建一个专门存储预选标签的模型,比如partner.custom.tag:
from odoo import models, fields class PartnerCustomTag(models.Model): _name = 'partner.custom.tag' _description = '合作伙伴自定义标签' name = fields.Char('标签名称', required=True) code = fields.Char('标签编码')
第二步:在res.partner中添加关联字段
继承res.partner模型,添加many2many字段关联上面的标签模型:
from odoo import models, fields class ResPartner(models.Model): _inherit = 'res.partner' custom_tag_ids = fields.Many2many( 'partner.custom.tag', string='自定义标签', help='选择预设的标签选项' )
2. 批量添加预选标签值
通过XML数据文件预设标签选项,这样打开视图就能直接选择:
<odoo> <data noupdate="1"> <record id="tag_vip" model="partner.custom.tag"> <field name="name">VIP客户</field> <field name="code">VIP</field> </record> <record id="tag_potential" model="partner.custom.tag"> <field name="name">潜在客户</field> <field name="code">POTENTIAL</field> </record> <record id="tag_coop" model="partner.custom.tag"> <field name="name">合作客户</field> <field name="code">COOP</field> </record> </data> </odoo>
3. 在视图中调用字段(使用many2many_tags组件)
现在在res.partner的视图XML中替换原字段,使用新定义的custom_tag_ids:
<field name="custom_tag_ids" widget="many2many_tags" string="自定义标签"/>
额外说明
如果不想新建模型,也可以用selection结合many2many的变通方案,但这种方式无法灵活扩展标签选项,仅适合临时固定场景。推荐优先使用关联模型的方案。
内容的提问来源于stack exchange,提问作者Matija Amondi
相关产品推荐
相关产品推荐

