我有几种具有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)]"
/>
我还尝试在组织对象上放置一个允许类型的相关字段,但我总是最终收到错误消息。 我的最后一次尝试是:
domain=[('id', 'in', allowed_type_ids)]
这会给出错误消息:
TypeError: not all arguments converted during string formatting
客户端实际上提取了一个JSON对象,如“allowed_type_ids”= [0,1,2]
,如果我用[0,1,2]
替换域表达式中的allowed_type_ids,则没有错误,我在我的选择中得到了三种组织类型。 ..
答案 0 :(得分:8)
试试这个:
<field
name="organization_type_id"
domain="[('id', 'in', parent_id.organization_type_id.allowed_children_ids.ids)]"
/>
虽然allowed_children_ids
是一组记录,但allowed_children_ids.ids
是这些记录的ID列表。
您也可以从另一方面处理此问题。这应该工作并且事件更快:
<field
name="organization_type_id"
domain="[('allowed_parent_type_ids', '=', parent_id.organization_type_id)]"
/>
答案 1 :(得分:5)
编辑:如果您的Odoo代码库是最新的,那么即使在我发布消息时,这个技巧在9.0和10.0中也不再起作用,请参阅https://github.com/odoo/odoo/issues/16072以获取更多详细信息。
有关替代方案,您可以尝试使用web_domain_field模块。 它目前在这里:https://github.com/OCA/web/pull/567
前回答:
要在Many2many上建立域名,您可以在Odoo常见问题解答中找到Olivier Dony的好答案: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])]
警告,如果你的many2many字段为空,这可能不适用于Odoo 9.0。