Odoo销售报表管道添加res.partner.category过滤功能的技术问询
在Odoo销售管道报表中添加客户分类过滤的解决方案
我来帮你搞定这个需求!结合你已经继承crm.opportunity.report模型的情况,咱们一步步来实现按客户标签(res.partner.category)过滤的功能:
1. 扩展报表模型字段
首先,在你的自定义模块里,给继承的crm.opportunity.report模型添加关联到客户标签的字段。因为报表模型是用于聚合统计的视图模型,咱们通过partner_id关联到客户的标签字段,并且设置store=True来支持报表的分组和过滤(毕竟报表需要预存数据才能高效查询):
from odoo import models, fields class CrmOpportunityReport(models.Model): _inherit = 'crm.opportunity.report' category_id = fields.Many2many( 'res.partner.category', string='Customer Tags', related='partner_id.category_id', store=True )
2. 修改报表搜索视图
接下来要让这个字段出现在报表的过滤选项里,咱们继承原有的销售管道报表搜索视图,添加客户标签的过滤组件:
<odoo> <!-- 继承搜索视图,添加客户标签过滤 --> <record id="view_crm_opportunity_report_search_inherit" model="ir.ui.view"> <field name="name">crm.opportunity.report.search.inherit</field> <field name="model">crm.opportunity.report</field> <field name="inherit_id" ref="crm.view_crm_opportunity_report_search"/> <field name="arch" type="xml"> <!-- 在团队过滤后添加客户标签过滤选项 --> <xpath expr="//filter[@name='my_team']" position="after"> <filter name="category_id" string="Customer Tags" domain="[('category_id', 'in', self)]" context="{'group_by': 'category_id'}" /> </xpath> <!-- 把客户标签字段加入搜索框的可选字段列表 --> <xpath expr="//field[@name='partner_id']" position="after"> <field name="category_id"/> </xpath> </field> </record> </odoo>
3. 可选:在报表视图中显示标签字段
如果你想在报表的树形视图里直接看到客户标签,可以继承原树形视图添加这个字段:
<!-- 继承树形视图,添加客户标签显示 --> <record id="view_crm_opportunity_report_tree_inherit" model="ir.ui.view"> <field name="name">crm.opportunity.report.tree.inherit</field> <field name="model">crm.opportunity.report</field> <field name="inherit_id" ref="crm.view_crm_opportunity_report_tree"/> <field name="arch" type="xml"> <xpath expr="//field[@name='partner_id']" position="after"> <field name="category_id"/> </xpath> </field> </record>
4. 模块配置与测试
- 确保你的自定义模块在
__manifest__.py中依赖crm模块:'depends': ['crm'], - 升级模块后,打开「销售→报表→销售管道」,就能看到新增的「Customer Tags」过滤选项,也可以在搜索框里直接搜索客户标签啦!
注意事项
如果升级后过滤功能没生效,可能需要手动刷新报表模型的SQL视图:可以在Odoo后台的「设置→技术→模型」里找到crm.opportunity.report,点击「刷新视图」按钮;或者通过执行以下代码触发:
self.env['crm.opportunity.report']._init_view()
内容的提问来源于stack exchange,提问作者Developer Marius Žilėnas
相关产品推荐
相关产品推荐

