使用Many2Many修改Many2One的域

时间:2018-07-18 20:01:31

标签: odoo odoo-10 odoo-enterprise

仅作为序言,我正在使用Odoo 10 Enterprise。

我有一个自定义模块,其形式为以下内容(这些只是相关的字段):

  • orange_tag_id =这是一个定义了_Checkboxes小部件的Many2Many字段,该字段已连接到标签模块(我们将其简称为orange.tags)。此字段显示我创建的六个或七个标签,然后将其应用于“ product.product / template”模块中的各种产品。
  • orange_child_ids =这只是父模块的子模块中的一个One2Many。这将列出product_tmpl_id Many2One,然后列出来自父级的orange_tag_id的只读副本,该副本仅以父级形式复制orange_tag_id中选择的内容(这是为了定义{域中的{1}}无法正常工作。

parent.orange_tag_id复选框中选择标签后,它应在orange_tag_id中修改product_tmpl_id的域,然后仅在具有以下内容的下拉显示屏中显示产品:被标记为所选的活动标签。通过将以下内容添加到orange_child_ids中的XML表单视图中,我设法完成了这种工作:

orange_child_ids

这将仅显示已被选定标签标记的产品,但有一个例外:Tag6的产品(由于其ID为6而仅称其为ID)将始终显示在下拉列表中,而不管其是否被选中。如果选择了Tag2,则将显示Tag2和Tag6的产品。我尝试从定义了标签的任何产品中删除Tag6,然后删除Tag6记录,重新创建标签,然后将其重新应用于相关产品,但是问题仍然存在。我还只能在复选框中选择一个标签-如果选择了多个标签,则会从<field name="product_tmpl_id" domain="[('orange_tag_id.id','in',parent.orange_tag_id[0])]"/>中收到以下错误:

product_tmpl_id

这并没有显示正确的记录那么重要,但是我也想解决这个问题,但是我不确定如何做到。

我搜索了几个小时,并且知道可以在自托管安装中完成此操作的方法,但是,我们使用的是Odoo 10 Enterprise(我在上述自定义中省略了必需的TypeError: not all arguments converted during string formatting字段,以便于阅读),并且我无法访问文件系统,因此无法在需要的地方进行修改。我一直在尝试仅使用开发人员工具以及我对数据库设置的管理访问权限来解决这个问题。

我在该域上乱七八糟,浏览了许多问题和论坛话题,而只有我才行。有什么方法可以使它在Enterprise的限制范围内正常工作?

有很多义务。

2 个答案:

答案 0 :(得分:0)

看来,在[2]之后添加[0]可以使一切正常工作并解决了我遇到的两个问题,因此:

<field name="product_tmpl_id" domain="[('orange_tag_id.id','in',parent.orange_tag_id[0][2])]"/>

这将根据在Many2Many字段中选择的记录来过滤Many2One的结果。

答案 1 :(得分:0)

虽然[('orange_tag_id.id','in',parent.orange_tag_id[0][2])]可以正常工作,但它却非常晦涩。

我建议您选择[('orange_tag_id.id','in',parent.orange_tag_id.ids)]