今天遇到一个需求,需要按条件筛选one2many子表的数据显示。
说一下解决思路:
刚开始想在xml视图中的one2many字段上直接写domain过滤,发现不生效。然后想着在字段上传context上下文,重写read方法,发现也行不通,因为字段上定义的上下文无法传递到后端的方法中,导致接收到的上下文中没有我们需要的特殊标记。所以重写read这种方式暂时被放弃。由于不太想去扩展o2m字段的js,就想看看还有没有其他偷懒的办法~
解决办法:
1. 扩展one2many渲染的js,在js中过滤数据(没有去实现这个方法,就不做展示了,但是理论上是可行的)
2. 在后端模型的one2many字段,定义domain
字段名 = fields.One2many('模型名', '字段名',domain=[('type', '!=', 'related')])
细心的朋友可能会发现这里的domain有一点不太一样,正常py文件的字段中定义domain需要用一个字符串包裹起来,我最开始也是用字符串包裹起来的,但是升级会报错说不能list和str相加,所以这里需要注意,domain是一个列表,而不是一个字符串形式的