Odoo 8:Many2many域名过滤器

cgs*_*cgs 15 openerp odoo-8

我有几种具有many2many关系的组织类型,描述哪些类型可能是其他类型的父类型(例如,部门可以是子部门和工作组的父级).它不是一个严格的层次结构(工作组可以是其他工作组的父级),因此有很多关系.

我的organization_type对象上有两个字段:allowed_parent_type_ids反之allowed_children_type_ids.

现在,我想根据组织对象的父级限制组织对象上的组织类型字段,因此"部门"的子级只能选择允许为部门子级的组织类型,依此类推.

在我的表单视图中,我试过:

<field
    name="organization_type_id"
    domain="[('id', 'in', parent_id.organization_type_id.allowed_children_ids)]"
    />
Run Code Online (Sandbox Code Playgroud)

我还试图在我的组织对象上放置一个允许类型的相关字段,但我总是会收到一条错误消息.我的最后一次尝试是:

domain=[('id', 'in', allowed_type_ids)]
Run Code Online (Sandbox Code Playgroud)

这给出了一条错误消息:

TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)

客户端实际上提取了一个JSON对象,如"allowed_type_ids"= [0,1,2]并且如果我在域表达式中替换allowed_type_ids [0,1,2]并且没有错误,我在我的选择中获得了三种组织类型...

Lud*_*mer 8

试试这个:

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

虽然allowed_children_ids是一组记录,allowed_children_ids.ids但是这些记录的ID列表.

你也可以从另一边接近这个.这应该工作并且事件更快:

<field
    name="organization_type_id"
    domain="[('allowed_parent_type_ids', '=', parent_id.organization_type_id)]"
    />
Run Code Online (Sandbox Code Playgroud)


Yan*_*ick 5

编辑:如果您的Odoo代码库是最新的,即使在我发布消息时,此技巧在9.0和10.0中也不再起作用,有关更多详细信息,请参见https://github.com/odoo/odoo/issueo/16072

另外,您可以尝试使用web_domain_field模块。当前在这里:https : //github.com/OCA/web/pull/567


前答案:

要在Many2many上拥有域名,您将在Olivier Dony的Odoo常见问题解答上找到一个好的答案:https ://www.odoo.com/fr_FR/forum/aide-1/question/complex-many2many-domains-in-views -41777#answer_41784

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

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

domain=[('id', 'in', allowed_type_ids[0][2])]
Run Code Online (Sandbox Code Playgroud)

警告,在many2many字段为空的情况下,这可能不适用于Odoo 9.0。