Openerp Odoo 8:多域过滤器

Openerp Odoo 8:多域过滤器,openerp,odoo-8,Openerp,Odoo 8,我有几个组织类型,其中有许多关系描述了哪些类型可能是其他类型的父类型(例如,部门可以是子部门和工作组的父类型)。它不是一个严格的层次结构(工作组可以是其他工作组的父级),因此存在多人关系 我的组织类型对象上有两个字段:allowed\u parent\u type\u id和inverseallowed\u children\u type\u id 现在,我想根据组织对象的父对象限制其“组织类型”字段,以便“部门”的子对象只能选择允许作为部门子对象的组织类型,依此类推 在我的表单视图中,我尝试了

我有几个组织类型,其中有许多关系描述了哪些类型可能是其他类型的父类型(例如,部门可以是子部门和工作组的父类型)。它不是一个严格的层次结构(工作组可以是其他工作组的父级),因此存在多人关系

我的组织类型对象上有两个字段:
allowed\u parent\u type\u id
和inverse
allowed\u children\u type\u id

现在,我想根据组织对象的父对象限制其“组织类型”字段,以便“部门”的子对象只能选择允许作为部门子对象的组织类型,依此类推

在我的表单视图中,我尝试了:

<field
    name="organization_type_id"
    domain="[('id', 'in', parent_id.organization_type_id.allowed_children_ids)]"
    />
这将显示一条错误消息:

TypeError: not all arguments converted during string formatting
客户机实际上获取了一个JSON对象,如“allowed_-type_-ID”=
[0,1,2]
,如果我用
[0,1,2]
替换域表达式中的allowed_-type_-ID,则没有错误,并且我在选择中获得了三种组织类型…

尝试以下操作:

<field
    name="organization_type_id"
    domain="[('id', 'in', parent_id.organization_type_id.allowed_children_ids.ids)]"
    />

编辑:这个技巧在9.0和10.0中不再有效,即使在我发布消息的时候,如果你的Odoo代码库是最新的,请参阅以获取更多详细信息

作为替代方案,您可以尝试使用web\u域\u字段模块。 目前在这里:


前答复:

要在许多网站上拥有域名,您可以在奥多常见问题解答中找到Olivier Dony的好答案:

简而言之,您需要处理正确的值,因为Many2many值是一个元组列表,如
[(6,0,ids)]

因此,您需要创建这样的域来比较ID:

domain=[('id', 'in', allowed_type_ids[0][2])]

警告,如果您的many2many字段为空,这可能在Odoo 9.0上不起作用。

尝试使用domain=“[('id','in',allowed_children_id[0][2])”我无法使用第一种解决方案(我尝试过类似的方法),但第二种方法有效。我用“in”作为接线员。“id中有id”似乎不符合逻辑,但它可以工作…我相信您允许使用\u type \u id[0][2](2而不是最后括号中的6)?-也许应该是“allowed_type_id和allowed_type_id[0][2]”,以确保列表有效。总之,这是一个巧妙的小把戏你知道这最近有没有变化吗?我发誓,直到最近几天,这对我一直有效。现在,当我在视图中查看服务器的输出时,我的自定义many2many字段突然不像以前那样显示
x_my_字段:[[6,0,[id1,id2]]
。它现在要么只显示一个id数组,要么有时显示其他许多命令的数组,如[[5],[1,id1,{}],[1,id2,{}]`。有什么变化吗?我正在使用Odoo 10 Saas。@flyingL123有什么变化。在最新版本的Odoo中不可能以这种方式使用它。您可能想看看这个模块:web\u domain\u字段。它允许您创建一个字段来计算域,并将此字段重新用作域进行筛选。我更新了我的答案因为这个解决方案不再有效了
<field
    name="organization_type_id"
    domain="[('allowed_parent_type_ids', '=', parent_id.organization_type_id)]"
    />
domain=[('id', 'in', allowed_type_ids[0][2])]