Many2many复选框选中odoo

问题描述

我一直致力于在 odoo12 中开发模块。我有一个很多人的字段。场景是当检查特定的多种2many字段时,将出现另一个字段,它在未选中时应该是不可见的。

测试类包含名称字段名称包含:test1,test2,test3 工作类包含 many2many 字段:

 test = fields.Many2many('test.py')
 test_by = fields.Char('Test')

XML

<field name="test" widget="many2many_checkBoxes"/>

当从复选框中选择 test1 时,字段 test_by 应该出现。

解决方法

如果选择了 fields_view_get,您可以覆盖 test_by 函数以显示 test1 字段。您需要找到 test1 记录并检查它是否在 test 记录集中。

在以下示例中,如果选择了 description 标签,我们将显示 product 字段。

import json
from lxml import etree
from odoo import models,fields,api


class CRMLead(models.Model):
    _inherit = 'crm.lead'

    @api.model
    def fields_view_get(self,view_id=None,view_type='form',toolbar=False,submenu=False):
        res = super(CRMLead,self).fields_view_get(view_id=view_id,view_type=view_type,toolbar=toolbar,submenu=submenu)
        if view_type == 'form':
            params = self.env.context.get('params',{})
            if 'id' in params:
                lead = self.env['crm.lead'].browse(params['id'])
                # You can use `search` method to find `test1` record
                tag_id = self.env.ref('crm.categ_oppor1')
                if tag_id in lead.tag_ids:
                    doc = etree.XML(res['arch'])
                    for node in doc.xpath("//field[@name='description']"):
                        node.set("invisible","0")
                        modifiers = json.loads(node.get("modifiers"))
                        modifiers['invisible'] = False
                        node.set("modifiers",json.dumps(modifiers))
                    res['arch'] = etree.tostring(doc,encoding='unicode')
        return res