Odoo13中如何用域筛选显示销售订单选中的多对多包记录
解决Odoo销售订单智能按钮筛选选中包裹的问题
嘿,刚接触Odoo一周就能完成这么多功能,已经相当厉害了!你现在遇到的问题是智能按钮点击后没有筛选出当前订单选中的包裹,核心原因就是selected_packages函数里的domain参数是空的,所以系统会返回所有sale.package记录。
要实现只显示当前订单选中的包裹,你只需要在返回的动作里添加一个针对包裹ID的过滤条件就行。具体来说,就是获取当前订单packs字段关联的所有包裹ID,然后用in操作符来筛选。
修改后的selected_packages函数代码如下:
def selected_packages(self): # 获取当前订单选中的所有包裹ID列表 package_ids = self.packs.ids return { 'name': 'Selected Packages', # 通过ID筛选,只显示当前订单选中的包裹 'domain': [('id', 'in', package_ids)], 'view_type': 'form', 'res_model': 'sale.package', 'view_id': False, 'view_mode': 'tree,form', 'type': 'ir.actions.act_window' }
关键说明:
self.packs.ids会提取当前订单packs字段(Many2many)关联的所有sale.package记录的ID,返回一个列表(比如[1,3,5])。domain里的('id', 'in', package_ids)表示只展示ID在这个列表里的包裹记录,这样就精准过滤出了当前订单选中的那些包裹。- 如果当前订单没有选中任何包裹,
package_ids会是一个空列表,此时domain会返回空结果,符合预期(没有包裹可显示)。
这样修改之后,点击智能按钮就能看到当前订单专属的选中包裹树状视图啦!
内容的提问来源于stack exchange,提问作者Vivi
相关产品推荐
相关产品推荐

