0

作为序言,我使用的是 Odoo 10 Enterprise。

我有一个自定义模块,其表单上有以下内容(这些只是相关字段):

  • orange_tag_id= 这是一个 Many2Many 字段,其中_Checkboxes定义了连接到标签模块的小部件(我们将称之为orange.tags)。此字段显示我创建的六个或七个标签,然后应用于“product.product/template”模块中的各种产品。
  • orange_child_ids= 这只是父模块的子模块中的 One2Many。这列出了product_tmpl_idMany2One,然后列出了来自父级的只读副本,orange_tag_id该副本仅复制父表单中选择的任何内容orange_tag_id(这是为了防止parent.orange_tag_id在域中定义不起作用而创建的)。

当从orange_tag_id复选框中选择标签时,它应该修改 in 的域,product_tmpl_id然后orange_child_ids仅在下拉显示中显示已用所选活动标签标记的产品。通过将以下内容添加到表单 XML 视图中,我已经成功地完成了这种工作orange_child_ids

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

这将仅显示已使用所选标​​签标记的产品,但有一个例外:Tag6 的产品(只是因为其 ID 为 6 而调用它)将始终显示在下拉列表中,无论它是否被选中。如果选择 Tag2,则显示 Tag2 和 Tag6 的产品。我尝试从定义了 Tag6 的任何产品中删除 Tag6,然后删除 Tag6 记录,重新创建标签并将其重新应用于相关产品,但问题仍然存在。我也只能在复选框中选择一个标签 - 如果选择了多个标签,我会收到以下错误product_tmpl_id

TypeError: not all arguments converted during string formatting

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

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

我在域上搞砸了很多,查看了许多问题和论坛主题,而我所拥有的是唯一有效的东西。有什么办法可以在 Enterprise 的限制内正常工作?

非常感谢。

4

2 回答 2

0

似乎在[2]之后添加[0]使一切正常并解决了我遇到的两个问题,所以:

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

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

于 2018-07-19T00:25:06.140 回答
0

虽然[('orange_tag_id.id','in',parent.orange_tag_id[0][2])]会起作用,但它非常晦涩难懂。

我建议你去[('orange_tag_id.id','in',parent.orange_tag_id.ids)]

于 2018-07-19T07:11:06.997 回答