【问题标题】:Modifying Domain of Many2One using Many2Many使用 Many2Many 修改 Many2One 的域
【发布时间】:2018-07-18 20:01:30
【问题描述】:

首先,我正在使用 Odoo 10 Enterprise。

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

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

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

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

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

TypeError: not all arguments converted during string formatting

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

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

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

非常感谢。

【问题讨论】:

    标签: odoo odoo-10 odoo-enterprise


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我已经尝试过了,但没有成功。它只是列出了 product.template 中的所有记录。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多