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

如何在Odoo伙伴视图中创建带预选选项的标签字段?

实现res.partner自定义预选标签字段(类似many2many_tags)

问题背景

你需要在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:36:32